首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从python脚本返回的C system() -令人困惑!

从python脚本返回的C system() -令人困惑!
EN

Stack Overflow用户
提问于 2010-11-06 08:51:22
回答 2查看 530关注 0票数 0

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

所以,下面是C:

代码语言:javascript
运行
复制
#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

代码语言:javascript
运行
复制
import sys
sys.exit(1)

这些程序的输出如下:

代码语言:javascript
运行
复制
script 1 returned 256

其他一些值:

代码语言:javascript
运行
复制
2       -> 512
800     -> 8192
8073784 -> 14336

假设它的is...reading是小端而不是大端,或者别的什么?我如何编写一个c函数(或者在python中使用技巧)来正确地返回和解释这些数字呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-06 09:01:53

在Linux documentation on system()中:

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

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

WEXITSTATUS( status ):返回子对象的退出状态。..。仅当WIFEXITED返回true时才应使用此宏。

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

票数 2
EN

Stack Overflow用户

发布于 2010-11-06 08:57:52

system()调用返回值的格式由waitpid()指定。终止状态与sh实用程序定义的状态不同。我不记得了,但它的工作原理是这样的:

代码语言:javascript
运行
复制
int exit_value, signal_num, dumped_core;

...

exit_value  = out >> 8;
signal_num  = out & 127;
dumped_core = out & 128;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4111279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档