我有一个使用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
为什么会这样?
在这方面,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)
在您的特定实现中,它可能会将返回值左移八位,并使用剩余的位来指定所有其他有用的东西。这是一个实现细节,因此不一定正确,但这是一个有根据的猜测。
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |