在程序退出前做点事情

179 投票
7 回答
163765 浏览
提问于 2025-04-16 04:56

你怎么能让一个函数或者其他东西在你的程序退出之前执行呢?我有一个脚本会一直在后台运行,我需要它在退出之前把一些数据保存到文件里。有没有什么标准的方法可以做到这一点?

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)

需要注意的是,这个方法在脚本正常结束时效果很好,但并不是在所有情况下都会被调用(比如遇到严重的内部错误时)。

撰写回答