我正在阅读Mark Lutz的 Programming Python ,我偶然发现了这一点:
对于管道对象,迭代器的效果可能更有用 而不是简单地避免将整个结果加载到内存中 once:readlines将始终阻止调用者,直到生成的程序 完全完成,而迭代器可能没有。
这是什么意思?
答案 0 :(得分:1)
如果您以subprocess.Popen
为例。如果调用向subprocess.PIPE
输出大量数据的命令,则调用proc.stdout.readlines()
将等待命令完全结束。
如果您将iter
与for line in iter(proc.stdout.readline,"")
一起使用,您将实时看到输出并避免将所有输出存储在内存中。
如果你必须处理输出的每一行,那么随着输入的进行逐行处理会更有意义,使用iter
允许你做阻塞,直到命令终止使用{{1 }}。