Я всегда думал, что итерация по файловому типу в 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, "")))
Кто-нибудь может объяснить разницу?