使用python我试图流式传输stderr并将stderr打印到控制台,同时将stdout的值赋给变量,这段代码看起来像我想要的那样,但这是我怎么做的呢?
proc = subprocess.Popen(["my","long","command"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr = subprocess.PIPE)
while True:
line = proc.stderr.readline()
if not line:
break
print line
st_out = proc.communicate()[0]
#now process st_out
答案 0 :(得分:0)
您可以删除while和if语句:
for line in iter(proc.stderr.readline, ""):
print(line)
答案 1 :(得分:0)
Popen.communicate
用于读取stdout和stderr以完成而不会出现死锁。如果你"预读" stdout,你运行stderr将填充的风险,程序将阻止。由于您希望stderr进入控制台,因此您不应该首先重定向它。只需使用沟通来阅读标准输出:
proc = subprocess.Popen(["my","long","command"], stdout=subprocess.PIPE)
st_out = proc.communicate()[0]