如何用iter()和yield迭代两个列表?

时间:2018-02-06 18:30:56

标签: python python-3.x loops iterable

一个简单的例子:

 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?迭代两个列表?

1 个答案:

答案 0 :(得分:4)

这些不是列表,使用它们的正确方法不是您使用列表的方式。如果要将进程的stdout和stderr填充到一个组合流中,请使用输出重定向执行此操作:

from subprocess import PIPE, STDOUT

process = subprocess.Popen(cmd, stdout=PIPE, stderr=STDOUT, ...)
#                                                   ^^^^^^