一个简单的例子:
popen = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True, shell=True)
for stdout_line in iter(popen.stdout.readline, ""): # how to add popen.stderr.readline check?
yield stdout_line
我们从popen.stdout
开始阅读,但我们也希望同时阅读stderr
!我们不知道什么时候会结束。
那么如何使用iter()和yield?迭代两个列表?
答案 0 :(得分:4)
这些不是列表,使用它们的正确方法不是您使用列表的方式。如果要将进程的stdout和stderr填充到一个组合流中,请使用输出重定向执行此操作:
from subprocess import PIPE, STDOUT
process = subprocess.Popen(cmd, stdout=PIPE, stderr=STDOUT, ...)
# ^^^^^^