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