Понимание хвоста -f в питоне

Я создал очень простой скрипт на 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.


person Karl Yngve Lervåg    schedule 16.03.2011    source источник


Ответы (1)


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

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

person Sven Marnach    schedule 16.03.2011
comment
А, это кажется очень разумным объяснением. Благодарю вас! - person Karl Yngve Lervåg; 16.03.2011
comment
Вы можете посмотреть :help crontab в Vim для получения некоторой информации по этому вопросу. Это та же проблема. - person Martin Tournoij; 16.03.2011