如何使用 iter() 和 yield 遍历两个列表?
Posted
技术标签:
【中文标题】如何使用 iter() 和 yield 遍历两个列表?【英文标题】:How to iterate through two lists with iter() and yield? 【发布时间】:2018-07-16 21:47:44 【问题描述】:一个简单的例子:
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 遍历两个列表呢?
【问题讨论】:
您可能需要在流上使用 read() 并进行自己的缓冲和 EOF 检测。 嗯...你想读取 stdout? 【参考方案1】:这些不是列表,使用它们的正确方法不是使用列表的方式。如果您想将进程的 stdout 和 stderr 填充到一个组合流中,请使用输出重定向:
from subprocess import PIPE, STDOUT
process = subprocess.Popen(cmd, stdout=PIPE, stderr=STDOUT, ...)
# ^^^^^^
【讨论】:
这将适用于我在这里的特定示例,但是否有概括? @DuckQueen:取决于您想将其概括为什么(在您询问之前,将其概括为列表没有意义)。我建议先对列表和流进行一些背景阅读,然后在结束时发布一个新问题,如果你还有什么要问的。以上是关于如何使用 iter() 和 yield 遍历两个列表?的主要内容,如果未能解决你的问题,请参考以下文章
python-迭代器(next(),iter()函数)和生成器(yield函数)
python-迭代器(next(),iter()函数)和生成器(yield函数)