有没有办法在
atexit
模块中注册并在退出时调用的函数中设置退出代码?对 sys.exit(code)
的调用会产生错误,并且不会将退出代码设置为所需的值。
d:\>python atexit_test.py
Error in atexit._run_exitfuncs:
Traceback (most recent call last):
File "atexit_test.py", line 3, in myexit
sys.exit(2)
SystemExit: 2
d:\>echo %ERRORLEVEL%
0
atexit_test.py
的内容:
def myexit():
import sys
sys.exit(2)
import atexit
atexit.register(myexit)
我可以证明测试代码可以在 Python 2.7.x(我的例子中为 2.7.6)中运行,正如@Łukasz Rogalski所报告的那样。所以我假设这是 Python 3.x 的一个错误,并提交了一个 bug 报告。
sys.exit(code)
未正确设置退出代码。但一种解决方法是使用
os._exit(code)
它可以设置所需的退出代码。请随意尝试一下。我知道
_exit
通常应该在分叉后的子进程中使用。但考虑到 bugs.python.org/issue27035 仍然开放,我需要使 atexit 回调设置正确的退出代码,以便我的 CI 可以捕获失败,这是我找到的唯一解决方法。