代码之家  ›  专栏  ›  技术社区  ›  tehwalrus

c system()从python脚本返回-令人困惑!

  •  0
  • tehwalrus  · 技术社区  · 14 年前

    我需要从C调用一个python脚本,并能够从中捕获返回值。值是什么并不特别重要,它们也可能是一个枚举,但是我从测试用例中得到的值让我困惑,我想弄清我看到的是什么。

    所以,这里是C:

    #include <stdlib.h>
    #include <stdio.h>
    
    int main(void)
    {
      int out = 0;
    
      out = system("python /1.py");
      printf("script 1 returned %d\n", out);
    
      return 0;
    }
    

    /1.py :

    import sys
    sys.exit(1)
    

    这些程序的输出如下:

    script 1 returned 256
    

    其他一些值:

    2       -> 512
    800     -> 8192
    8073784 -> 14336
    

    假设它是…用小而不是大端读,还是什么?如何编写c函数(或欺骗python)以正确返回和解释数字?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Kevin Lacquement    14 年前

    从Linux documentation

    ... 返回状态采用wait(2)中指定的格式。因此,命令的退出代码将是WeXITSt身份(状态)…

    从上的链接开始 wait

    状态(状态):返回子的退出状态。... 只有当WIFEXITED返回true时,才应使用此宏。

    这意味着你不能使用 system()

        2
  •  1
  •   Paulo Scardine    14 年前

    system()调用返回值采用waitpid()指定的格式。终止状态不是为sh实用程序定义的。我想不起来了,但它的作用是:

    int exit_value, signal_num, dumped_core;
    
    ...
    
    exit_value  = out >> 8;
    signal_num  = out & 127;
    dumped_core = out & 128;