如何在python中绕过sys.exit()的0-255范围限制?

ℝap*_*ink 7 python linux exit-code

在python中(在Linux系统上),我正在启动一个使用os.system()和检索返回代码的命令.如果返回代码不同于0,我想使用相同的返回代码退出程序.所以我写道:

ret = os.system(cmd)
if ret != 0:
   print "exit with status %s" % ret
   sys.exit(ret)
Run Code Online (Sandbox Code Playgroud)

当返回代码低于256时,它工作正常,但是当它大于255时,使用的退出代码是0.如何使sys.exit()接受大于255的代码?

编辑:限制实际为255

实际上,ret变量接收256,但sys.exit()未能使用它,因此程序返回0.当我cmd手动启动时,我看到它返回1而不是256.

ℝap*_*ink 6

实际上,文档表明了这一点

退出状态指示:一个16位数字,其低字节是杀死进程的信号编号,其高字节是退出状态(如果信号编号为零); 如果生成核心文件,则设置低字节的高位.

所以我需要处理sys.exit()返回的数字,以便检索真正的退出状态,如下所示:

ret = os.system(cmd)
# Ignore the first byte, use the second one only
ret = ret >> 8
if ret != 0:
   print "exit with status %s" % ret
   sys.exit(ret)
Run Code Online (Sandbox Code Playgroud)

现在它可以工作:ret包含1而不是256.


Ada*_*erg -3

对我有用(CentOS 5.5,Python 2.6.5):

$ python
>>> import sys
>>> sys.exit(245)
$ echo $?
245
Run Code Online (Sandbox Code Playgroud)

  • 255 限制由 shell 强制执行:http://tldp.org/LDP/abs/html/exit-status.html 和 http://tldp.org/LDP/abs/html/exitcodes.html (2认同)