如何读取stdout和stderr并使用子进程Popen一次保存它?

时间:2015-06-26 14:42:38

标签: python subprocess

我已经看到围绕这个主题的几个问题,但没有一个对我有用。我需要的是获取subprocess.Popen([...],stdout=subprocess.PIPE)完整标准输出和stderr并将其全部写入文件,例如:

import tempfile
import subprocess

stattmpfile = tempfile.NamedTemporaryFile(suffix=".log",prefix="status",delete=False)
proc = subprocess.Popen([mycommand, myparams], stdout=subprocess.PIPE)
while proc.poll() is None:
    output = proc.stdout.readline()
    statusfile.write(output)
output = proc.communicate()[0]
statusfile.write(output)
statusfile.close()

在这个例子中,我只得到标准输出的第一行而没有别的。

1 个答案:

答案 0 :(得分:2)

将子进程的stdout和stderr保存到文件中:

import subprocess

with open('filename', 'wb', 0) as file:
    subprocess.check_call(cmd, stdout=file, stderr=subprocess.STDOUT)