Python错误代码被提升

时间:2011-09-30 21:15:37

标签: python

考虑一个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中。

2 个答案:

答案 0 :(得分:7)

来自docs

  

在Unix上,返回值是编码进程的退出状态   为wait()指定的格式。请注意,POSIX未指定   C system()函数的返回值的含义,所以返回   Python函数的值取决于系统。

     

os.wait()

     

等待子进程完成,并返回包含的元组   它的pid和退出状态指示:一个16位数字,其低字节为   杀死进程的信号编号,其高字节是   退出状态(如果信号编号为零);低位的高位   如果生成了核心文件,则设置字节。

在您的情况下,二进制的返回值768是00000011 00000000。高字节为3。

答案 1 :(得分:5)

文档

os.system()

  

在Unix上,返回值是编码进程的退出状态   为wait()

指定的格式

os.wait()

  

一个16位   number,其低字节是杀死进程的信号编号,   其高字节是退出状态(如果信号编号为零)


768

的高/低字节
00000011 00000000
 status   signal

具体代码

>> 8结果可以安全地获得您的实际退出状态(system()的结果在平台之间不是非常便携的。)

import os
result = os.system("python error.py")
print result >> 8