如何在程序退出之前执行某项功能或某些功能?我有一个将在后台持续运行的脚本,我需要它在退出之前将一些数据保存到文件中。有没有一种标准的方法呢?
答案 0 :(得分:113)
查看atexit
模块:
http://docs.python.org/library/atexit.html
例如,如果我想在应用程序终止时打印消息:
import atexit
def exit_handler():
print 'My application is ending!'
atexit.register(exit_handler)
请注意,这对于正常终止脚本非常有用,但在所有情况下都不会被调用(例如,致命的内部错误)。
答案 1 :(得分:24)
如果你想要总是运行某些东西,即使是错误,也可以使用try:finally:喜欢这个 -
def main():
try:
execute_app()
finally:
handle_cleanup()
if __name__=='__main__':
main()
如果您还要处理异常,可以在finally:
之前插入except :.答案 2 :(得分:12)
如果您通过引发KeyboardInterrupt
来停止脚本(例如按Ctrl-C),则可以将其作为标准异常捕获。您也可以以同样的方式捕捉SystemExit
。
try:
...
except KeyboardInterrupt:
# clean up
raise
我提到这一点只是为了让你了解它; “正确”的方法是上面提到的atexit
模块。
答案 3 :(得分:0)
如果您有在程序的整个生命周期中都存在的类对象,您还可以使用 __del__(self)
方法从类中执行命令:
class x:
def __init__(self):
while True:
print ("running")
sleep(1)
def __del__(self):
print("destructuring")
a = x()
如果执行被中止,这也适用于正常程序结束,当然会有一些例外:
running
running
running
running
running
Traceback (most recent call last):
File "x.py", line 14, in <module>
a = x()
File "x.py", line 8, in __init__
sleep(1)
KeyboardInterrupt
destructuring