考虑一个python脚本error.py
import sys
sys.exit(3)
调用
python error.py; echo $?
产生预期的“3”。但是,请考虑runner.py
import os
result = os.system("python error.py")
print result
产生768.似乎某种程度上python代码的结果已经被8个移位,但这两种情况如何不同并不清楚。发生了什么事?
这发生在python 2.5和2.6中。
答案 0 :(得分:7)
来自docs:
在Unix上,返回值是编码进程的退出状态 为wait()指定的格式。请注意,POSIX未指定 C system()函数的返回值的含义,所以返回 Python函数的值取决于系统。
os.wait()
等待子进程完成,并返回包含的元组 它的pid和退出状态指示:一个16位数字,其低字节为 杀死进程的信号编号,其高字节是 退出状态(如果信号编号为零);低位的高位 如果生成了核心文件,则设置字节。
在您的情况下,二进制的返回值768是00000011 00000000
。高字节为3。
答案 1 :(得分:5)
在Unix上,返回值是编码进程的退出状态 为wait()
指定的格式
一个16位 number,其低字节是杀死进程的信号编号, 其高字节是退出状态(如果信号编号为零)
00000011 00000000
status signal
>> 8
结果可以安全地获得您的实际退出状态(system()
的结果在平台之间不是非常便携的。)
import os
result = os.system("python error.py")
print result >> 8