Python子进程给出错误的值(给出8位值而不是64位)

时间:2017-09-20 06:22:37

标签: python c subprocess 64-bit 8-bit

我在Python中测试子进程选项。我在C中编写了简单的代码,我希望在Python中通过子进程运行它。这是它的外观:

C代码example.c(首先我执行代码然后在子进程中使用可执行文件):

#include <stdio.h>

int main(int argc, char *argv[]) {
    int number= 2110;

    while (1==1)
    {
        printf("%d",number);
        printf(" return number: ")
        return number;

    }
    return 0;
}

Python代码:

def subTest():
    while True:
        numberS = subprocess.call('./example')
        print (numberS)

运行python代码后我应该有的输出:

2110 return number: 2110

我得到的输出:

2110 return number: 62

我在一些&#39;数字上测试它?和正确的值我得到255然后256 - &gt; 0等等为什么?为什么它提供8位值以及如何返回正确的值?

1 个答案:

答案 0 :(得分:3)

这不是Python的问题,但实际上是Linux的一个功能。 Looking at this answer

  

目前,大多数基于Unix的系统仅支持8位返回值。 Windows支持(至少)32位返回值。

所以,假设您使用的是Unix,那么即使您拥有int main(),返回值也会被限制在0到255之间。同样来自链接的问题:

int main(void){
return 256;
}
echo $? ;  # out 0

您必须找到另一种方法来返回值 - 也许打印出来? This answer shows how to do it

run = subprocess.Popen('./example', stdout = subprocess.PIPE,
                        stderr = subprocess.PIPE, env={'LANG':'C++'})
data, error = run.communicate()
numberS = int(data)