为什么捕获的sys.exit()代码与提供的代码不同?

Pra*_*g k 2 c++ python

我有一个使用system()命令运行python程序的c ++程序。我已经sys.exit()在python代码中使用错误代码返回了一些值。但是,当我用c ++捕获返回的值时,它不同于我在python程序中编码的值。

我的python代码: test.py

    import sys
    sys.exit(10)
Run Code Online (Sandbox Code Playgroud)

我的C ++代码: test.cpp

    #include "iostream"

    using namespace std;
    int main ()
    {
      string str = "python test.py";
      const char *command = str.c_str();
      int value = system(command);
      cout<<value;
      return 0;
     }
Run Code Online (Sandbox Code Playgroud)

当我运行run test.cpp时,我知道2560 为什么会这样?

pax*_*blo 5

在这方面,C ++标准遵循C(C ++ 17到C11)的标准,它具有以下含义:

如果参数为空指针,则仅当命令处理器可用时,系统函数才返回非零。如果参数不是空指针,并且系统函数确实返回,则它返回实现定义的值。

假设您使用的是Linux或其他POSIX-y类型的系统,则返回代码与wait()调用填充的状态匹配。

这不是简单的映射,因为它必须能够返回有关退出原因的各种元信息,该信息超出了简单退出代码的范围(例如,考虑到信号会杀死进程)。

这意味着你可能需要使用相同的你会为wait(),如果你想获得正确的值。

具体来说,您应该使用类似以下的内容:

if (WIFEXITED(value))
    printf("Normal exit, returned %d\n", WEXITSTATUS(value));
Run Code Online (Sandbox Code Playgroud)

在您的特定实现中,它可能会将返回值左移八位,并使用剩余的位来指定所有其他有用的东西。这是一个实现细节,因此不一定正确,但这是一个有根据的猜测。