【发布时间】:2013-01-15 18:18:03
【问题描述】:
我有以下 C++ 代码
...
int res = system("python myscript.py");
if(res != 0){
cerr << "Exit code was:" << res << endl;
}
python脚本文件以
结尾print "This will exit with code 0"
sys.exit(0)
如果我直接运行 python 脚本,我会得到正确的退出代码 (0)。但是,如果我通过 c++ 应用程序运行它,res 为 -1,即使正确打印了“This will exit with code 0”行。
奇怪的是,如果我将调用移到 C++ 应用程序执行的开头,则系统调用 python 返回的退出代码是正确的。
什么会导致它在此过程中变得“错误”?
编辑:
在围绕问题添加一些调试“cout”信息后......它消失了。看起来我有一只黑森虫。
【问题讨论】:
-
来自我系统上的文档:“如果无法创建子进程,或者无法获得命令语言解释器的终止状态,则 system() 应返回 -1 并设置 errno 以指示错误。”
errno是否也告诉您系统上的任何内容? (errno在这里是否有用是系统特定的;实际上,返回值是否有意义甚至是系统特定的。) -
您要求我们调试我们看不到的代码。如果我理解正确,上面的代码本身就可以工作,对吧? (例如,如果其他代码运行脚本然后更改工作目录,那将完美地解释您的问题。)
-
什么是操作系统,如果是*nix,你使用的shell是什么?
-
在流程执行过程中最有可能改变的是流程状态。即当前目录。使用脚本的绝对路径(为了不硬编码,最好从路径创建到可执行文件)。
标签: c++ python system-calls exit-code