Перенаправить вывод программы на экран и файл одновременно

У меня есть скрипт на Python. Я хочу сохранить его результат, пока он выводит что-то в терминал. я пытаюсь

python program.py 2>&1 | tee output.txt

Кажется, только после завершения программы, он будет печатать все вещи на экране. Во время бега ничего не выводится. Это действительно беспокоит меня, я хочу знать прогресс во время выполнения программы. Есть ли способы вывода на экран и в файл одновременно?


Обновление 13 ноября
Спасибо за помощь от @egmont. Любой, кто сталкивается с той же проблемой, может попробовать следующие команды. Он выведет на экран и запишет в файл одновременно.

stdbuf -oL python program.py 2>&1 | tee ouput.txt

1 ответ

У меня была та же проблема («все», что связано с манипулированием, напримерnohup, фон (&) или перенаправление). Для меня интересно,stdbuf -oLне решил проблему. Но оказывается, что и Python 2, и Python 3 (из каких именно подверсий, извините, не знаю) поддерживают-uвариант, который делаетstdoutиstderrнебуферизованный. См. https://www.commandlinux.com/man-page/man1/python2.7.1.html.

Я только что заметил (согласно этой странице руководства), что в Python 2.7stdinтакже сделан без буферизации, тогда как на странице руководства Python 3 (для меня 3.10) специально сказано"This option has no effect on the stdin stream."

Итак, исходная команда ОП будет выглядеть так:

      python -u program.py 2>&1 | tee output.txt

Затем я получаю поведение, которое ожидал бы от PHP/awk/и т. д.

Поскольку ОП спросил: «Есть ли способы одновременного вывода на экран и в файл?», это «решение» основано наteeкоторый уже вывел ОП - ему просто нужноpython -uчтобы дать более знакомое поведение.

Другие вопросы по тегам