如何在退出Python脚本(成功与否)时注册一个具有所有正确处理程序等的函数?
我试过了:
@atexit.register
def finalise():
'''
Function handles program close
'''
print("Tidying up...")
...
print("Closing")
...但是当用户关闭命令提示符窗口时,这不会被调用(因为当exitcode为非零时,不会调用@atexit.register
修饰函数)
我正在寻找一种保证在程序退出时调用finalise()
的方法,无论错误如何。
对于上下文,我的Python程序是一个不断循环的服务程序,旨在一直运行。
提前致谢
答案 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