c++&引用;系统“;呼叫不';t不';t返回正确的退出代码 我有以下C++代码< /P> ... int res = system("python myscript.py"); if(res != 0){ cerr << "Exit code was:" << res << endl; }

c++&引用;系统“;呼叫不';t不';t返回正确的退出代码 我有以下C++代码< /P> ... int res = system("python myscript.py"); if(res != 0){ cerr << "Exit code was:" << res << endl; },c++,python,system-calls,exit-code,C++,Python,System Calls,Exit Code,如果直接运行python脚本,则会得到正确的退出代码(0)。但是,如果我通过C++应用程序运行,RES是-1,即使“代码将退出代码0”的行被正确打印。 奇怪的是,如果我将调用移动到C++应用程序的执行开始,系统调用返回到Python的退出代码是正确的。 什么会导致它在这一过程中变得“错误” 编辑: 在添加有关问题的调试“cout”信息后。。。它消失了。看起来我有一个海森堡。你确定脚本正在运行吗 试一试 。。。 int res=system(“/usr/bin/python/path/to/mys

如果直接运行python脚本,则会得到正确的退出代码(0)。但是,如果我通过C++应用程序运行,RES是-1,即使“代码将退出代码0”的行被正确打印。

奇怪的是,如果我将调用移动到C++应用程序的执行开始,系统调用返回到Python的退出代码是正确的。 什么会导致它在这一过程中变得“错误”

编辑:


在添加有关问题的调试“cout”信息后。。。它消失了。看起来我有一个海森堡。你确定脚本正在运行吗

试一试

。。。
int res=system(“/usr/bin/python/path/to/myscript.py”);
如果(res!=0){

我的系统上的文档中的cerr:“如果无法创建子进程,或者如果无法获取命令语言解释器的终止状态,system()将返回-1并设置errno以指示错误。”
errno
是否也告诉您系统上的任何信息?(这是特定于系统的
errno
在这里是否有用;实际上,返回值是否有意义甚至是特定于系统的。)请阅读这篇文章,您要求我们调试我们看不到的代码。如果我理解正确,上面的代码本身就可以工作,对吗?(例如,如果其他代码运行该脚本,然后更改工作目录,这将很好地解释您的问题。)操作系统是什么,如果是*nix,您使用的shell是什么?在进程执行期间最有可能更改的是进程状态。即当前目录。请使用脚本的绝对路径(为了避免硬编码,最好从路径到可执行文件创建它)。问题已经回答了:“即使正确打印了“This will exit with code 0”行。”只有在脚本实际运行时,才会打印该行。好吧,我的错,我将删除此答案。@hvd:无论如何,脚本至少从某个地方运行过一次。由于此代码本身可以工作,因此完全有可能此代码不工作的其他代码正在运行脚本,甚至可能更改工作目录。@DavidSchwartz Ha,这是一个很好的创造性思维。我非常希望这是正确的:)不,调用不是从其他任何地方发出的。我将添加一些输出以确保在我的源代码上运行grep不会显示任何其他python调用。
print "This will exit with code 0"
sys.exit(0)
...
int res = system("/usr/bin/python /path/to/myscript.py");
if(res != 0){
    cerr << "Exit code was:" << res << endl;
}