Получение readline для блокирования на FIFO

Я создаю FIFO:

mkfifo tofetch

Я выполняю этот код Python:

fetchlistfile = file("tofetch", "r")
while 1:
    nextfetch = fetchlistfile.readline()
    print nextfetch

Это останавливается на readline, как я надеялся бы. Я работаю:

echo "test" > tofetch

И моя программа больше не останавливается. Это читает строку и затем продолжает цикличное выполнение навсегда. Почему это не остановится снова, когда будет нет новых данных?

Я также пытался наблюдать "не fetchlistfile.closed", я не буду возражать вновь открыть его после каждой записи, но Python думает, что FIFO все еще открыт.

7
задан Dan 9 March 2010 в 03:01
поделиться

1 ответ

Согласно документации к readline, он возвращает пустую строку, если и только если вы находитесь в конце файла. Closed - это не то же самое, что end-of-file. Объект файла будет закрыт только тогда, когда вы вызовете .close(). Когда ваш код достигает конца файла, readline() продолжает возвращать пустую строку.

Если вы просто используете объект file в качестве итератора, Python будет автоматически читать по строке за раз и остановится в конце файла. Например, так:

fetchlistfile = file("tofetch", "r")
for nextfetch in fetchlistfile:
    print nextfetch

Команда echo "test" > tofetch открывает именованную трубу, записывает в нее "test" и закрывает конец трубы. Поскольку конец трубы для записи закрыт, конец для чтения видит конец файла.

4
ответ дан 7 December 2019 в 14:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: