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

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

python script.py > out.log nohup &

Операторы печати не отображаются в out.log, но программа заканчивается нормально.

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

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

Ответ 1

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

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

  • Используйте переключатель командной строки -u
  • Оберните sys.stdout в объект, который сбрасывается после каждой записи
  • Установить PYTHONUNBUFFERED env var
  • sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

Ответ 2

Вы пытались:

  • Запуск без перенаправления и убедитесь, что все напечатано как ожидалось
  • Запуск не через оболочку script, а просто из командной строки

?

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