Rac*_*caR 80 python function exit
如何在程序退出之前执行某项功能或某些功能?我有一个将在后台持续运行的脚本,我需要它在退出之前将一些数据保存到文件中.有这样做的标准方法吗?
Bre*_*ode 134
看看atexit
模块:
http://docs.python.org/library/atexit.html
例如,如果我想在应用程序终止时打印消息:
import atexit
def exit_handler():
print 'My application is ending!'
atexit.register(exit_handler)
Run Code Online (Sandbox Code Playgroud)
请注意,这对于脚本的正常终止非常有用,但在所有情况下都不会被调用(例如,致命的内部错误).
Bri*_*ane 29
如果你想要总是运行一些东西,即使是错误,请使用try:finally:喜欢这个 -
def main():
try:
execute_app()
finally:
handle_cleanup()
if __name__=='__main__':
main()
Run Code Online (Sandbox Code Playgroud)
如果你还想处理异常,可以在finally之前插入一个except:
Kat*_*iel 15
如果通过引发KeyboardInterrupt
(例如通过按Ctrl-C)来停止脚本,则可以将其作为标准异常捕获.你也可以SystemExit
用同样的方式捕捉.
try:
...
except KeyboardInterrupt:
# clean up
raise
Run Code Online (Sandbox Code Playgroud)
我提到这只是为了让你了解它; "正确"的方法是atexit
上面提到的模块.
这是根据其他答案改编的版本。它应该可以正常退出、终止和 PyCharm 停止按钮(我可以确认的最后一个)(尚未完全测试)。
import signal
import atexit
def handle_exit(*args):
try:
... do computation ...
except BaseException as exception:
... handle the exception ...
atexit.register(handle_exit)
signal.signal(signal.SIGTERM, handle_exit)
signal.signal(signal.SIGINT, handle_exit)
Run Code Online (Sandbox Code Playgroud)