Python sys.exit 返回码
我在一个Python脚本里尝试调用另一个Python脚本,并获取返回代码,代码如下:
print os.system("python -c 'import sys; sys.exit(0)'")
print os.system("python -c 'import sys; sys.exit(1)'")
我得到了返回代码0和256。为什么当我用sys.exit(1)时,它会返回256呢?
1 个回答
10
引用了 os.system()
的文档
在Unix系统中,返回值是进程的退出状态,这个状态是按照
wait()
函数规定的格式编码的。需要注意的是,POSIX并没有规定C语言的system()
函数返回值的具体含义,因此Python函数的返回值依赖于系统。
我强调一下,返回值是依赖于系统的,并且是以编码的格式返回的。
os.wait()
的文档中提到:
等待一个子进程完成,并返回一个包含其进程ID和退出状态指示的元组:这是一个16位的数字,低字节是杀死该进程的信号编号,高字节是退出状态(如果信号编号为零);如果生成了核心文件,低字节的高位会被设置。
这里的退出状态不是你所关注的,而是一个退出状态指示,这个指示是基于C语言的 system()
调用的返回值,而这个返回值是依赖于系统的。
1 被打包进一个16位值的高字节中:
>>> 1 << 8
256
你可以用以下方法提取退出代码和信号:
exit_code, signal, core = status_ind >> 8, status_ind & 0x7f, bool(status_ind & 0x80)
但要记住这个依赖于系统的警告。
如果你想更可靠和简单地获取退出代码,可以使用 subprocess
模块。