python错误的subprocess.call返回代码

时间:2018-07-22 19:44:13

标签: python

看看这两个用C语言编写的简单程序:

#include <stdio.h>
int main(int argc, char *argv[]) {
    return -1;
}

#include <stdio.h>
int main(int argc, char *argv[]) {
    return 1337;
}

现在看一下这个非常基本的python脚本:

>>> import subprocess
>>> r=subprocess.call(['./a.out'])

我不明白为什么,但是python脚本r值包含:

  • 第一个C程序为255。应该是-1
  • 第二个C程序的57。应该是1337

我有什么问题吗?

谢谢

1 个答案:

答案 0 :(得分:1)

Python与它无关。这取决于系统。

在Unix / Linux系统上,返回码存储在1个字节中,并且未签名,因此截断发生在0-255范围之外。

因此-1变为255,1337变为57(可以通过应用模数256进行检查)。

请注意,在Windows中,返回代码 可以大于255(可以通过join,但仍不能为负)

结论是:不要过多依赖返回码来传递信息。而是在控制台上打印一些内容。

相关:https://unix.stackexchange.com/questions/37915/why-do-i-get-error-255-when-returning-1