Разница между итерацией файлового типа и вызовом readline

Я всегда думал, что итерация по файловому типу в Python будет эквивалентна вызову его метода readlineв цикле, но сегодня я обнаружил ситуацию, когда это неправда. В частности, у меня есть процесс Popen'd p, где

list(itertools.takewhile(lambda x: x != "\n",
                         p.stdout))

зависает (предположительно потому, что pожидает ввода; оба stdinи stdoutявляются каналами для моего процесса Python), а следующее работает:

list(itertools.takewhile(lambda x: x != "\n",
                         iter(p.stdout.readline, "")))

Кто-нибудь может объяснить разницу?

6
задан Fred Foo 4 April 2012 в 13:41
поделиться