Python Subprocess空输出

时间:2018-01-10 09:16:21

标签: python process subprocess

我有这段代码:

pprocess = subprocess.Popen('PROGRAM', stdout=subprocess.PIPE)

while True:
    output = pprocess.stdout.readline()
    print 'output = ', output

但输出没有使用python代码打印,而是在控制台上打印,并且它似乎是直接从流程打印的。

有没有人遇到过这个问题?

2 个答案:

答案 0 :(得分:1)

  

但输出没有使用python代码打印,而是在控制台上打印

似乎输出正在STDERR流上打印,而不是STDOUT流;你只是捕获了STDOUT。

所以,消耗stderr流(也是):

pprocess = subprocess.Popen('PROGRAM', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# Checking just the STDERR here
for line in pprocess.stderr:
    print(line)

作为旁注,而不是在readline()循环中使用while,只需迭代Popen.stdout / Popen.stderr提供的类似文件的对象,它们是迭代器

答案 1 :(得分:0)

通过执行stdout stream阅读stdout.readline后,它变为空。您必须将Popen调用移至while循环或更改逻辑:

while True:
    pprocess = subprocess.Popen('PROGRAM', stdout=subprocess.PIPE)
    output = pprocess.stdout.readline()
    print 'output = ', output