Операторы печати Python буферизируются с помощью > перенаправление вывода

Я делаю операторы print в python , Я выполняю свой скрипт следующим образом:

python script.py > out.log nohup &

Не все операторы print отображаются в out.log , но программа завершает работу нормально.

Эта строка кода находится в файл .sh Я выполняю, выполнив ./ script.sh

Обновление: Журнал получает все данные, но не до тех пор, пока не будет напечатано определенное количество строк. Казалось бы, он буферизировал вывод.

12
задан John Kugelman supports Monica 18 August 2010 в 19:54
поделиться

2 ответа

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

Вам нужно будет добавить вызовы sys.stdout.flush () после каждой строки, если вы хотите, чтобы вывод был виден немедленно, или полностью отключите буферизацию. См. Отключить буферизацию вывода , чтобы узнать, как сделать последнее:

  1. Используйте ключ командной строки -u
  2. Оберните sys.stdout в объекте, который сбрасывается после каждой записи
  3. Set PYTHONUNBUFFERED env var
  4. sys.stdout = os.fdopen (sys.stdout.fileno (), 'w', 0)
25
ответ дан 2 December 2019 в 05:53
поделиться

Вы пробовали:

  1. Запустить его без перенаправления и убедиться, что все напечатано как ожидаемый
  2. Запуск не через сценарий оболочки, а просто из командной строки

?

Эти шаги могут помочь вам разобраться в проблеме.

1
ответ дан 2 December 2019 в 05:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: