在程序退出前做点事情
你怎么能让一个函数或者其他东西在你的程序退出之前执行呢?我有一个脚本会一直在后台运行,我需要它在退出之前把一些数据保存到文件里。有没有什么标准的方法可以做到这一点?
7 个回答
29
如果你通过按 Ctrl-C 来停止脚本,这会引发一个叫做 KeyboardInterrupt
的情况,你可以像处理普通错误一样去捕捉它。你也可以用同样的方法捕捉 SystemExit
。
try:
...
except KeyboardInterrupt:
# clean up
raise
我提到这个只是让你知道这件事;其实更好的做法是使用上面提到的 atexit
模块。
47
如果你想让某个代码始终运行,即使出现错误,也可以使用 try: finally:
这种写法,像这样 -
def main():
try:
execute_app()
finally:
handle_cleanup()
if __name__=='__main__':
main()
如果你还想处理错误,可以在 finally:
之前加一个 except:
。
284
看看这个 atexit
模块:
http://docs.python.org/library/atexit.html
比如说,如果我想在我的应用程序结束时打印一条消息:
import atexit
def exit_handler():
print 'My application is ending!'
atexit.register(exit_handler)
需要注意的是,这个方法在脚本正常结束时效果很好,但并不是在所有情况下都会被调用(比如遇到严重的内部错误时)。