Python 使atexit注册函数根据退出状态动作
在上面的代码中,Python 使atexit注册函数根据退出状态动作,python,python-2.7,Python,Python 2.7,在上面的代码中,再见每次退出时都会执行。我可以根据退出状态打印不同的消息吗?类似于如果退出状态为1,则打印致命:再见 我也检查了sys.exitfunc,但这似乎也不支持这一点?这不是应该得到支持的基本功能吗?或者对于这样的情况,是否有更好的功能可以使用。使用包装器函数退出我的程序是唯一的方法吗?你可以很容易地使用monkey patchsys.exit: import atexit import sys @atexit.register def goodbye(): print "
再见
每次退出时都会执行。我可以根据退出状态打印不同的消息吗?类似于如果退出状态为1,则打印致命:再见
我也检查了
sys.exitfunc
,但这似乎也不支持这一点?这不是应该得到支持的基本功能吗?或者对于这样的情况,是否有更好的功能可以使用。使用包装器函数退出我的程序是唯一的方法吗?你可以很容易地使用monkey patchsys.exit
:
import atexit
import sys
@atexit.register
def goodbye():
print "Good Bye"
print "Hello World"
#sys.exit(0) or sys.exit(1)
当然,只有在实际从代码中的某个地方调用了sys.exit
时,才会运行此命令
您也可以将主函数包装为try/except:
>>> import sys
>>> sys.my_exit = sys.exit
>>> def func(status):
... if status:
... print "Fatal!"
... sys.my_exit(status)
...
>>> sys.exit = func
>>> sys.exit(1)
Fatal!
基本上,我需要两条单独的消息“runfinishedsyccessfully”和“Aborted”。因此,在这段代码中,如果不实际调用sys.exit(0),就无法打印“Run finished successfully”。@shadyabhi——我们需要测试用户放入
sys.exit(0)
——这仍然会引发SystemExit
,如果我们没有显式执行,就不会打印“success”
。最终,这似乎是一些有用的东西,可以作为装饰器包含在atexit
中,或者可能包含在contextlib
-中,并具有退出状态(main、func,即获取退出状态):…
import sys
def main():
pass
sys.exit(2) #comment this out, or change the exit status to 0 to test.
try:
main()
except SystemExit as e:
if e.args[0]: #non-zero exit status
print "Failed"
else:
print "Success"
raise
else:
print "Success"