我正在处理一个程序,该程序需要在退出前立即调用一个函数,并且成功地使用atexit.register(myFunction(进行了调用,直到它停止工作。即使我尝试只运行一个简单的脚本,注册的函数也不会被调用。。。
这是一个简单的代码:
import atexit
def all_done():
print ('all_done()')
print ('Registering')
atexit.register(all_done)
print ('Registered')
输出为:
Registering
Registered
应该在什么时候:
Registering
Registered
all_done()
可能是什么问题?就像我说的,它工作了一段时间,然后突然停止了。
我最终没有使用atexit,而只是使用
try:
...
finally:
...
目前正在发挥作用。尽管如此,我仍然不知道为什么atexit不起作用。。。
欢迎,2年前的帖子。如果你有同样的问题:请记住,引用,"当程序被Python未处理的信号终止时,当检测到Python致命的内部错误时,或者当操作系统运行时,都不会调用通过该模块注册的函数_调用exit((">
这意味着像系统关闭或os._exit()
这样的事情不会调用atexit函数,但像键盘中断或sys.exit()
这样的事情没有问题。
示例:
import atexit
def all_done():
print ('all_done()')
print ('Registering')
atexit.register(all_done)
print ('Registered')
os._exit()
将输出
Registering
Registered
但是,这里的代码是:
import atexit
def all_done():
print ('all_done()')
print ('Registering')
atexit.register(all_done)
print ('Registered')
sys.exit()
将输出
Registering
Registered
all_done()
希望我能帮上忙!
来源:https://docs.python.org/3/library/atexit.html