Python脚本中的C system()返回值 - 令人困惑!
我需要从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 个回答
1
system()这个函数的返回值格式是由waitpid()决定的。它的结束状态和sh工具定义的方式不太一样。我记不太清楚具体是怎样的,但大概是这样的:
int exit_value, signal_num, dumped_core;
...
exit_value = out >> 8;
signal_num = out & 127;
dumped_core = out & 128;
2
根据Linux的文档关于system()的说明:
... 返回的状态格式是按照wait(2)中规定的。因此,命令的退出代码可以通过WEXITSTATUS(status)来获取 ...
从关于wait
的链接中,我们了解到:
WEXITSTATUS(status):返回子进程的退出状态。 ... 这个宏只有在WIFEXITED返回真时才能使用。
这就是说,你不能直接使用system()
的返回值,而是需要用一些宏来处理它们。而且,因为这符合C语言的标准,不仅仅是Linux的实现,所以在你使用的任何操作环境中,都需要遵循同样的步骤。