比如手动停止 py 文件运行时自动保存一些变量什么的. 找来找去也没找到合适的方法.
|
wwqgtxxApr 20, 2018 via iPhone
1
一般都是用信号量去通知进程自己退出
|
|
2
except KeyboardInterrupt
|
|
byteliApr 20, 2018
3
关键词 python 信号处理 SIGINT
|
|
AliencnApr 20, 2018
4
数据量不大的话可以变量更改时在其他地方也写一份,比如用 log,redis 之类的
|
|
SingeeKingApr 20, 2018
5
except KeyboardInterrupt:
pass |
|
PyjamasApr 20, 2018
6
```
import atexit def exit_handler(): global config with open('reservoir_simulate.config', 'w') as config_file: config_file.write(json.dumps(config, indent = 4)) print('Program finished! Current node = ' + str(config["reservoir"]["start_node"])) if __name__ == '__main__': atexit.register(exit_handler) ``` [Doing something before program exit]( https://stackoverflow.com/questions/3850261/doing-something-before-program-exit) |
|
PyjamasApr 20, 2018
7
Sorry 打错了- -
``` import atexit def exit_handler(): ... if __name__ == '__main__': atexit.register(exit_handler) ``` |
|
8
try...except 和 atexit 都不行,singal 倒是可以终止程序,但是不能注册函数,如果注册函数,则无法终止程序,处理函数也不会执行:
#main.py .......... def hander(a,b): print('.....test........') if __name__ == '__main__': import signal signal.signal(signal.SIGTERM,hander) #如果注册函数则无法终止程序,不注册则可以终止程序 from PyQt5.QtCore import QCoreApplication app = QCoreApplication(sys.argv) main = MainEngine() main.login() app.exec_() #a.py import signal import os os.kill(<pid>,signal.SIGTERM) |
|
guyskk0x0Apr 22, 2018 via Android
9
@dwjgwsm signal hander 里要主动调用 sys.exit 退出。kill 信号有很多种,Unix 信号机制了解一下。
|
|
PyjamasApr 23, 2018
10
atexit 为啥不行,我平时都用这个,就是 ctrl+c 或者 kill -INT $pid 杀死进程的时候,exit_handler()函数都会执行的
|
|
cortexm3Apr 24, 2018
11
信号量
|
|
luoqize1Apr 24, 2018
12
捕获 ctrl+c
|