【发布时间】:2015-09-08 04:20:16
【问题描述】:
有几种调用 C++ 可执行程序的方法。例如,我们可以使用
def run_exe_return_code(run_cmd):
process=subprocess.Popen(run_cmd,stdout=subprocess.PIPE,shell=True)
(output,err)=process.communicate()
exit_code = process.wait()
print output
print err
print exit_code
return exit_code
处理 C++ 可执行程序:run_exe_return_code('abc') 而abc 由以下 C++ 代码创建:
int main()
{
return 1;
}
在上面的代码中,程序的返回值是1,如果我们在Linux中运行这个Python脚本,我们总是可以看到Python脚本的返回值是1。但是,在Android环境下,似乎返回上述python脚本中的退出码为0,表示成功。有没有办法让Python脚本知道Android环境下main函数的返回值?
顺便说一句,在android环境中,我使用adb shell abc而不是abc来运行程序。
【问题讨论】:
-
你能描述一个实际的例子吗?是什么让您认为 0 不是正确答案?
-
@ReutSharabani 测试起来很简单。在 main() 函数中,你只能返回 1。然后你只需运行 run_exe_return_code python 函数,exit_code 为 0。然后,如果你将 main() 函数中的返回值更改为 0,并运行一次 python 脚本再次,你会发现 exit_code 仍然是 0。
-
@feelfree 那么为什么不使用
int main(){return 1;}制作一个complete 示例呢?它将避免混淆,更重要的是,它可以立即编译。 -
@PadraicCunningham 有什么理由让他的代码不起作用?我使用了相同的功能并且它有效。它有什么缺点吗?
-
@ReutSharabani,通信已经阻塞等待进程终止,等待也会导致死锁docs.python.org/2/library/subprocess.html#subprocess.Popen.wait