如何在脚本退出时可靠地调用Python函数?

时间:2012-12-18 11:23:41

标签: python python-2.7

如何在退出Python脚本(成功与否)时注册一个具有所有正确处理程序等的函数?

我试过了:

@atexit.register
def finalise():
    '''
    Function handles program close
    '''
    print("Tidying up...")
    ...
    print("Closing")

...但是当用户关闭命令提示符窗口时,这不会被调用(因为当exitcode为非零时,不会调用@atexit.register修饰函数)

我正在寻找一种保证在程序退出时调用finalise()的方法,无论错误如何。

对于上下文,我的Python程序是一个不断循环的服务程序,旨在一直运行。

提前致谢

5 个答案:

答案 0 :(得分:3)

我不认为它可以在纯Python中完成。来自documentation

  

注意:当通过此模块注册的功能时不会被调用   当一个Python时,程序被Python处理的信号杀死   检测到致命的内部错误,或者调用os._exit()时。

我认为您可能会觉得这很有用:How to capture a command prompt window close event in python

答案 1 :(得分:0)

您是否尝试在主函数或代码块中捕获各种异常?

答案 2 :(得分:0)

这个应该有效

Ctrl-C和断言失败时均可使用。也许您可以使用类似的构造并将其打包为装饰器或其他任何东西。

def main():
  print raw_input('> ')
  # do all your stuff here  

if __name__ == '__main__':
  try:
    main()
  finally:
    print 'Bye!'

答案 3 :(得分:0)

  

对于上下文,我的Python程序是一个不断循环的服务程序,旨在一直运行。

这很难做到(见How do you create a daemon in Python?)。您应该使用http://pypi.python.org/pypi/python-daemon/之类的库。

答案 4 :(得分:-1)

atexit.register(func)

func = lambda x: x

使用http://docs.python.org/2/library/atexit.html