如何捕获调用语句的stdout和stderr

时间:2014-05-23 19:58:19

标签: python

如何捕获调用语句的stdout和stderr,我有以下命令,但我不确定它是否成功?任何人都可以提供输入吗?

call("export COMMANDER_SERVER=commander.company.com" ,shell=True)

3 个答案:

答案 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对象的更多信息。