我有这段代码:
pprocess = subprocess.Popen('PROGRAM', stdout=subprocess.PIPE)
while True:
output = pprocess.stdout.readline()
print 'output = ', output
但输出没有使用python代码打印,而是在控制台上打印,并且它似乎是直接从流程打印的。
有没有人遇到过这个问题?
答案 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