在C ++中返回system()函数调用的值,用于运行Python程序

时间:2012-06-07 11:44:12

标签: c++ python linux system

我正在Linux上使用代码调用system()来运行python程序。我对这个函数调用返回的值感兴趣,以了解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()的值?

1 个答案:

答案 0 :(得分:12)

根据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";
}