Вы можете выполнить это, используя встроенную функцию iter()
, используя метод вызова с двумя аргументами:
import functools
for i in iter(fuctools.partial(sys.stdin.read, 1), '\n'):
...
Документация для этого:
iter(o[, sentinel])
... Если задан второй аргумент sentinel , то o должен быть вызываемым объектом. Созданный в этом случае итератор вызовет o без аргументов для каждого вызова его метода next()
; если возвращаемое значение равно sentinel , будет поднят StopIteration
, в противном случае значение будет возвращено.
Одно полезное приложение второго форма iter()
- читать строки файла до тех пор, пока не будет достигнута определенная линия. Следующий пример читает файл, пока метод readline()
не возвращает пустую строку:
blockquote>
with open('mydata.txt') as fp:
for line in iter(fp.readline, ''):
process_line(line)