我尝试在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时?
答案 0 :(得分:9)
在Unix上,返回值是以
wait()
指定的格式编码的进程的退出状态。请注意,POSIX没有指定Csystem()
函数返回值的含义,因此 Python函数的返回值取决于系统。
强调我的。返回值取决于系统,并返回编码的格式。
等待子进程完成,并返回一个包含其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。