流式传输和打印标准,并将 stout 写入文件



使用 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]

相关内容

最新更新