tail -f не работает в оболочке, когда файл заполняется через file.write () - PullRequest
3 голосов
/ 10 января 2011

Приветствую всех,

Я пытаюсь демонизировать скрипт python, который в настоящее время выполняется на переднем плане. Тем не менее, мне все еще нужно видеть вывод, который он в настоящий момент выдает на стандартный вывод.

Поэтому я использую следующий фрагмент кода, который генерирует уникальное имя файла в / tmp, а затем назначает sys.stdout этому новому файлу. Все последующие вызовы «print» затем перенаправляются в этот файл журнала.

import uuid
outfile = open('/tmp/outfile-' + str(uuid.uuid4()), 'w')
outfile.write("Log file for daemon script...\n")
sys.stdout=outfile

# Rest of script uses print statements to dump information into the /tmp file
.
.
.

Проблема, с которой я сталкиваюсь, заключается в том, что, когда я tail -f файл, созданный в / tmp, я не вижу никакого вывода. Однако после того, как я уничтожу свой процесс-демон, выходные данные будут видны в лог-файле / tmp, потому что python очищает данные файла.

Я хочу отслеживать файл журнала / tmp в режиме реального времени, поэтому было бы замечательно, если каким-то образом вывод можно сделать видимым в режиме реального времени.

Одним из решений, которое я попробовал, было использование небезопасного ввода-вывода, но это тоже не помогло.

Любая помощь будет принята с благодарностью!

Спасибо и всего наилучшего, Warpcore

1 Ответ

4 голосов
/ 10 января 2011

Старайтесь использовать небуферизованный ввод / вывод.Проблема почти наверняка в том, что ваш вывод буферизован.

Открытие файла следующим образом должно работать:

outfile = open(name, 'w', 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...