无法从子进程check_output检索输出

时间:2014-07-10 07:44:21

标签: python python-3.x subprocess

我想知道如何将程序的输出保存在文件中。

特别是,我试图将vowpal_wabbit应用程序的所有输出保存到文件中,当从Python运行它时:

rez1 = subprocess.check_output([parameters], shell=True, universal_newlines=True)
print(rez1)

然而它没有打印出来,而程序本身执行得很好。这很奇怪,因为当从终端使用相同的参数运行时,它为我提供了一些有用的信息。

有人可以建议解决方案吗?

P.S。 Python 3.4.1(通过Anaconda的IPython),Mac OS X

2 个答案:

答案 0 :(得分:2)

有些程序写入stdout和stderr。为了构建@Tichodroma的代码,以下打印' stdout' stdout,' stderr'到stderr,合并两个流,并正确捕获两个输出:

import subprocess

res = subprocess.check_output(
    "echo stdout; /bin/echo stderr 1>&2",
    shell=True,
    stderr=subprocess.STDOUT,
    )
print 'DATA:', res.replace('\n', '.')
print 'END'

输出

DATA: stdout.stderr.
END

答案 1 :(得分:1)

如果您的程序打印到STDOUT,则表示您正在使用subprocess.check_output。一个工作的例子:

res = subprocess.check_output("date", shell=True, universal_newlines=True)
print(res)

输出:

Thu Jul 10 09:49:31 CEST 2014\n