对于你的android问题,你可以使用^{},它“传播程序退出状态,而不是总是以状态0退出”(首选),或者使用这个workaround(hackish。。。不建议用于生产用途):def run_exe_return_code(run_cmd):
process=subprocess.Popen(run_cmd + '; echo $?',stdout=subprocess.PIPE,shell=True)
(output,err)=process.communicate()
exit_code = process.wait()
print output
print err
print exit_code
return exit_code
注意,最后一个进程的代码是echo-ed,所以从输出中获取,而不是从{}的退出代码中获取。在
$?返回最后一个退出代码。所以打印它允许您从python访问它。在
关于你最初的问题:
我不能复制这个。下面是一个简单的例子:
.c文件的内容:
^{pr2}$
编译(默认情况下为a.out中…):reut@reut-VirtualBox:~/pyh$ gcc c.c
.py文件的内容:reut@reut-VirtualBox:~/pyh$ cat tstc.py
#!/usr/bin/env python
import subprocess
def run_exe_return_code(run_cmd):
process=subprocess.Popen(run_cmd,stdout=subprocess.PIPE)
(output,err)=process.communicate()
exit_code = process.wait()
print output
print err
print exit_code
run_exe_return_code('./a.out')
测试:reut@reut-VirtualBox:~/pyh$ ./tstc.py
None
1
exit_code如预期是1。在
请注意,返回值始终是整数。您可能需要使用^{}获得的输出:Run command with arguments and return its output as a byte string.
示例:>>> subprocess.check_output(["echo", "Hello World!"])
'Hello World!\n'
注意:如果返回值是1,这表示一个错误,^{}异常将被引发(这通常是一件好事,因为您可以响应它)。在