Python пишет в буфер вместо файла - PullRequest
0 голосов
/ 02 мая 2020

Я довольно новичок в Python, но я столкнулся со странным поведением, которое не могу объяснить / решить. По сути, мне нужно перенаправить вывод сценария python в файл.

Пример:

while True:
  print('tick')
  time.sleep(5)

, а затем перенаправить вывод в файл

python test.py >> test.log 2>&1

Но вещь является ли файл пустым, пока скрипт не будет завершен. Похоже, что он записывает вывод в некоторый буфер и только в конце отправляет этот буфер в файл.

Это совершенно неприемлемо для меня, так как у меня есть скрипт, который работает 24/7, и в этом случае, Я никогда не буду получать надлежащие журналы. Мне нужно в режиме реального времени записывать в файл.

Я знаю, что это можно исправить с помощью

with open('test.log', mode='a') as log_file:

Но в этом случае я потеряю возможность просматривать результат в терминале. Кроме того, я буду строго ограничен файлом, указанным внутри скрипта.

Полагаю, это не проблема Python, а более общая c. Тем не менее, возможно ли выполнить мгновенную запись в файл, как я вижу это в терминале?

Ответы [ 2 ]

1 голос
/ 02 мая 2020

Похоже, что записывает вывод в некоторый буфер

Это правильно. Вы можете отключить это с помощью flush=True, так:

while True:
  print('tick', flush=True)
  time.sleep(5)
0 голосов
/ 02 мая 2020

Попробуйте:

with open('log.log', 'w+') as log_file:    
print('tick', file=log_file)

Таким образом, вывод на печать будет go в файл вместо stdout

...