使用 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
您可以删除 while 和 if 语句:
for line in iter(proc.stderr.readline, ""):
print(line)
>Popen.communicate
用于读取 stdout 和 stderr 以完成而不会死锁。如果您"预读"标准输出,您将面临 stderr 填充和程序阻塞的风险。由于您希望 stderr 转到控制台,因此您不应该首先重定向它。只需使用通信来读取标准输出:
proc = subprocess.Popen(["my","long","command"], stdout=subprocess.PIPE)
st_out = proc.communicate()[0]