readlines将始终阻止调用者

时间:2015-03-28 20:15:29

标签: python

我正在阅读Mark Lutz的 Programming Python ,我偶然发现了这一点:

  

对于管道对象,迭代器的效果可能更有用   而不是简单地避免将整个结果加载到内存中   once:readlines将始终阻止调用者,直到生成的程序   完全完成,而迭代器可能没有。

这是什么意思?

1 个答案:

答案 0 :(得分:1)

如果您以subprocess.Popen为例。如果调用向subprocess.PIPE输出大量数据的命令,则调用proc.stdout.readlines()将等待命令完全结束。

如果您将iterfor line in iter(proc.stdout.readline,"")一起使用,您将实时看到输出并避免将所有输出存储在内存中。

如果你必须处理输出的每一行,那么随着输入的进行逐行处理会更有意义,使用iter允许你做阻塞,直到命令终止使用{{1 }}。