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

时间:2010-11-06 00:51:22

标签: python c return-value

我需要从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 in)来正确返回和解释数字?

2 个答案:

答案 0 :(得分:2)

从系统上的Linux documentation :(

  

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

通过wait上的链接,我们得到以下信息:

  

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

这相当于您无法直接使用system()的返回值,但必须使用宏来操作它们。而且,由于这符合C标准而不仅仅是Linux实现,因此您需要对正在使用的任何操作环境使用相同的过程。

答案 1 :(得分:1)

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

int exit_value, signal_num, dumped_core;

...

exit_value  = out >> 8;
signal_num  = out & 127;
dumped_core = out & 128;