Я создаю FIFO:
mkfifo tofetch
Я выполняю этот код Python:
fetchlistfile = file("tofetch", "r")
while 1:
nextfetch = fetchlistfile.readline()
print nextfetch
Это останавливается на readline, как я надеялся бы. Я работаю:
echo "test" > tofetch
И моя программа больше не останавливается. Это читает строку и затем продолжает цикличное выполнение навсегда. Почему это не остановится снова, когда будет нет новых данных?
Я также пытался наблюдать "не fetchlistfile.closed", я не буду возражать вновь открыть его после каждой записи, но Python думает, что FIFO все еще открыт.
Согласно документации к readline, он возвращает пустую строку, если и только если вы находитесь в конце файла. Closed - это не то же самое, что end-of-file. Объект файла будет закрыт только тогда, когда вы вызовете .close(). Когда ваш код достигает конца файла, readline() продолжает возвращать пустую строку.
Если вы просто используете объект file в качестве итератора, Python будет автоматически читать по строке за раз и остановится в конце файла. Например, так:
fetchlistfile = file("tofetch", "r")
for nextfetch in fetchlistfile:
print nextfetch
Команда echo "test" > tofetch
открывает именованную трубу, записывает в нее "test" и закрывает конец трубы. Поскольку конец трубы для записи закрыт, конец для чтения видит конец файла.