Понимание "tail -f в питоне" - PullRequest
3 голосов
/ 16 марта 2011

Я создал очень простой скрипт на python:

def read_then_follow(file):
    for line in file:
        yield line
    while True:
        line = file.readline()
        if not line:
            time.sleep(1.0)
            continue
        yield line

for line in read_then_follow("some_file.txt"): print line

Файл "some_file.txt" содержит несколько строк текста, которые будут записаны на экран при запуске скрипта.Если я затем добавлю строку к файлу с echo "line" >> some_file.txt, строка будет выведена на экран в течение 1 секунды.Но: если я открою файл в vim , добавлю строку внизу и сохраню, скрипт перестанет работать.Он не записывает новую строку, записанную в vim , на экран и не отвечает на дальнейшие команды echo ....

Для вашего сведения, в настоящее время я использую python 2.6.6 в Ubuntu 10.10.

1 Ответ

8 голосов
/ 16 марта 2011

(я предполагаю, что вы работаете в какой-то Unix-подобной операционной системе.)

Сохранение в vim фактически создаст на диске новый файл с тем же именем. Дескриптор файла, который хранится в вашем скрипте, по-прежнему указывает на файл old , в котором больше нет записи каталога. Если ваш сценарий завершится, счетчик ссылок старого файла упадет до 0 и файл будет удален.

...