【问题标题】:Return value of system() function call in C++, used to run a Python programC++中system()函数调用的返回值,用于运行Python程序
【发布时间】:2012-06-11 11:13:11
【问题描述】:

我正在使用调用system() 来运行python 程序的代码在Linux 上工作。我对此函数调用返回的值感兴趣,以了解 python 程序的执行情况。

到目前为止,我已经找到了 3 个结果:

  • python进程成功完成后system()返回值为0

  • 当python进程在执行过程中被杀死(使用kill -9 pid),system()返回的值为9

  • 当python进程因参数错误而自行失败时,system()返回值为512

这不符合我所读到的关于 system() 函数的内容。

此外,被调用的python程序的代码显示当遇到任何错误时它会以sys.exit(2)退出,当执行成功完成时会以sys.exit(0)退出。

谁能把这两个联系起来?我是否以错误的方式解释了返回值?是否涉及一些Linux处理,它接受python程序的sys.exit()函数的参数并基于它返回system()的值?

【问题讨论】:

  • 你是如何调用python程序的?即system("/usr/bin/env python /path/to/script");?
  • system("python progname.py arg1 arg2 arg2"); Python 已添加到 PATH

标签: c++ python linux system


【解决方案1】:

您调用的程序的退出代码可以根据manual page 使用WEXITSTATUS(status) 获取。另请参阅wait 的手册页。

int status = system("/path/to/my/program");
if (status < 0)
    std::cout << "Error: " << strerror(errno) << '\n';
else
{
    if (WIFEXITED(status))
        std::cout << "Program returned normally, exit code " << WEXITSTATUS(status) << '\n';
    else
        std::cout << "Program exited abnormaly\n";
}

【讨论】:

  • 如何在 Windows 7 中做到这一点?定义WIFEXITED的头文件是什么?
  • @CroCo Windows 在退出代码方面没有相同的东西,它是 POSIX 的东西。
猜你喜欢
  • 2017-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
相关资源
最近更新 更多