在atexit回调中设置退出代码

问题描述 投票:0回答:2

有没有办法在

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 python-3.x python-3.5 atexit
2个回答
1
投票

我可以证明测试代码可以在 Python 2.7.x(我的例子中为 2.7.6)中运行,正如@Łukasz Rogalski所报告的那样。所以我假设这是 Python 3.x 的一个错误,并提交了一个 bug 报告


0
投票
我正在使用 python 3.8,我可以确认

sys.exit(code)

 未正确设置退出代码。但一种解决方法是使用 
os._exit(code)
 它可以设置所需的退出代码。请随意尝试一下。我知道 
_exit
 通常应该在分叉后的子进程中使用。但考虑到 bugs.python.org/issue27035 仍然开放,我需要使 atexit 回调设置正确的退出代码,以便我的 CI 可以捕获失败,这是我找到的唯一解决方法。

© www.soinside.com 2019 - 2024. All rights reserved.