考虑一个python脚本error.py
import sys
sys.exit(3)
Run Code Online (Sandbox Code Playgroud)
调用
python error.py; echo $?
Run Code Online (Sandbox Code Playgroud)
产生预期的"3".但是,请考虑runner.py
import os
result = os.system("python error.py")
print result
Run Code Online (Sandbox Code Playgroud)
收益768.似乎某种程度上python代码的结果已经被8个移位,但这两种情况如何不同并不清楚.这是怎么回事?
这发生在python 2.5和2.6中.
在Unix上,返回值是以wait()指定的格式编码的进程的退出状态
一个16位数字,其低字节是杀死进程的信号编号,其高字节是退出状态(如果信号编号为零)
00000011 00000000
status signal
Run Code Online (Sandbox Code Playgroud)
>> 8结果应该是安全的,以获得您的实际退出状态(system()然而,跨平台的结果不是很容易).
import os
result = os.system("python error.py")
print result >> 8
Run Code Online (Sandbox Code Playgroud)