У меня проблема с питоном. Я использовал Python 2.7.13 и Python 3.6.0 на Red Hat Enterprise Linux Server версии 7.1 (Maipo). Чтобы контролировать вывод процессов, я хочу использовать tail -f
, чтобы вживую взглянуть на STDOUT и STDERR. Ключевое слово здесь - небуферизованный вывод. Многие предложения в Интернете говорят об использовании python -u ...
или переменной окружения PYTHONUNBUFFERED, например PYTHONUNBUFFERED=1 python ...
или stdbuf -e0 -o0 python ...
. Тем не менее, следующий тестовый сценарий не вызывает никаких трудностей.
import sys
import time
while(True):
print("Test String")
time.sleep(1);
Для всех разных команд у меня всегда есть буферизованный вывод. Даже если я хочу использовать STDERR. Он по-прежнему находится в буфере, что меня очень смущает, потому что STDERR по умолчанию не должен быть буферизован. Использование sys.stdout.flush()
или sys.stderr.flush()
также не работает. При использовании flush=True
внутри print()
он работает как задумано.
Я ищу решение, в котором нет необходимости редактировать код, потому что я не могу редактировать все программы, чтобы получить небуферизованный и немедленно очистить вывод. Как я могу этого добиться?
Жду ваших ответов!
С наилучшими пожеланиями!
print(flush=True)
функцию. - person Elis Byberi   schedule 07.11.2017python -u
илиPYTHONUNBUFFERED
вместо того, чтобы они работали ... Я даже не знаю, почему они не работают так, как рекламируется. - person fwillo   schedule 07.11.2017print("Test String")
сделал то, чего нет? независимо от того, буферизован он или нет, результат будет одинаковым. - person Nils Werner   schedule 08.11.2017print
сtail
, чтобы увидеть, как идет прогресс.print("Test String")
- это просто фиктивный сценарий, с помощью которого я хочу это проверить. До сих пор stdout и stderr, а такжеprint
создавали буферизованный вывод при перенаправлении их в файл. Поэтому трудно отслеживать мои журналы с помощьюtailf
, потому что я получаю новый вывод каждые 4-6 часов. - person fwillo   schedule 09.11.2017