Python sys.exit返回代码

时间:2014-05-21 16:28:56

标签: python

我尝试在python脚本中调用另一个python脚本,并获取返回代码,如下所示:

print os.system("python -c 'import sys; sys.exit(0)'")
print os.system("python -c 'import sys; sys.exit(1)'")

我得到返回码0和256.为什么它返回256,当我用值1进行sys.exit时?

1 个答案:

答案 0 :(得分:9)

引用os.system() documentation

  

在Unix上,返回值是以wait() 指定的格式编码的进程的退出状态。请注意,POSIX没有指定C system()函数返回值的含义,因此 Python函数的返回值取决于系统。

强调我的。返回值取决于系统,并返回编码的格式。

os.wait() documentation说:

  

等待子进程完成,并返回一个包含其pid和退出状态指示的元组:一个16位数字,其低字节是杀死进程的信号编号,其高字节是退出状态(如果信号编号为零);如果生成了核心文件,则设置低字节的高位。

这是您正在查看的退出状态,但是退出状态指示,它基于C system()调用的返回值,其返回值取决于系统。

这里,您的退出状态1被打包到16位值的高字节中:

>>> 1 << 8
256

您可以通过以下方式提取退出代码和信号:

exit_code, signal, core = status_ind >> 8, status_ind & 0x7f, bool(status_ind & 0x80)

但请记住系统相关的警告。

如果您想更可靠,更轻松地检索退出代码,请使用subprocess module