如何捕获调用语句的stdout和stderr,我有以下命令,但我不确定它是否成功?任何人都可以提供输入吗?
call("export COMMANDER_SERVER=commander.company.com" ,shell=True)
答案 0 :(得分:0)
我认为您正在寻找stdout=subprocess.PIPE
答案 1 :(得分:0)
您可以在subprocess
中使用几乎任何方法,但需要附加管道。一个简单的方法是在文档中:
>>> subprocess.check_output(
... "ls non_existent_file; exit 0",
... stderr=subprocess.STDOUT,
... shell=True)
'ls: non_existent_file: No such file or directory\n'
文档还会对subprocess.call
:
注意
不要将stdout = PIPE或stderr = PIPE与此函数一起使用,因为它可能会基于子进程输出卷死锁。需要管道时,请使用Popen和communic()方法。
答案 2 :(得分:0)
执行此操作的正确方法是创建Popen对象。例如:
from subprocess import Popen, PIPE
proc = Popen('command arg --option', stdout=PIPE, stderr=PIPE, shell=True)
return_code = proc.wait()
stdout, stderr = proc.communicate()
print(stdout if return_code==0 else stderr)
您可以在Python docs中找到有关Popen对象的更多信息。