我知道我可以这样做来执行一个系统命令,例如make,它会给我一个0表示成功,或者一个非零表示失败。
import os
result = os.system('make')
我也知道我可以这样做,所以我可以看到命令的返回字符串
import commands
result = commands.getoutput('make')
如何同时完成两者,返回代码和返回字符串结果,然后我就可以
if return_code > 0:
print(return_string)
感谢。
答案 0 :(得分:4)
使用Python运行内容的规范方法是使用onClickListener
模块,但它有一大堆神秘的函数称为subprocess
或check_call
,这些函数往往含有神秘色彩警告如"不要使用stdout = PIPE或stderr = PIPE使用此功能",所以让我提供更多:
check_output
现在,该进程正在后台运行,您可以参考它。
编辑:我差点忘了 - 如果您想稍后检索输出,您必须告诉Python为标准输出创建读取管道。如果您不执行此步骤,stdout和stderr将只执行您的程序的标准输出和标准错误,并且proc = subprocess.Popen(["your_command", "parameter1", "paramter2"],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
不会在步骤2中接收它们。
communicate
communicate
也可以让你做更多的事情:
stdout, sterr = proc.communicate()
return_code = proc.returncode
参数)input=
参数)确保同时捕捉并妥善处理来自Popen
或communicate
的任何例外情况。
如果你不关心旧的Python,那就是一个更简单的方法subprocess.run
,它可以做到这一切:
timeout=
对于错误检查,您可以致电completed_process = subprocess.run(
['your_command', 'parameter'],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
# this starts the process, waits for it to finish, and gives you...
completed_process.returncode
completed_process.stdout
completed_process.stderr
或将completed_process.check_returncode()
作为check=True
的附加参数传递。
答案 1 :(得分:0)
另一种可能更简单的方法是:
import subprocess
try:
output = subprocess.check_output("make", stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as e:
print('return code =', e.returncode)
print(e.output)