在程序退出之前做某事

时间:2010-10-03 15:02:31

标签: python function exit

如何在程序退出之前执行某项功能或某些功能?我有一个将在后台持续运行的脚本,我需要它在退出之前将一些数据保存到文件中。有没有一种标准的方法呢?

4 个答案:

答案 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