Python sys.exit 返回码

6 投票
1 回答
7024 浏览
提问于 2025-04-18 07:13

我在一个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 模块

撰写回答