Это относится к ответу Кристована Д. Соузы, но я пока не могу комментировать.
Прямой способ использования аргумента ключевого слова flush
для Python 3 , чтобы всегда имел небуферизованный вывод:
import functools
print = functools.partial(print, flush=True)
после этого печать всегда будет сбрасывать вывод напрямую (кроме случаев, когда задан flush=False
).
Обратите внимание, (а) что это отвечает на вопрос только частично, так как не перенаправляет весь вывод. Но я думаю, print
является наиболее распространенным способом создания вывода для stdout
/ stderr
в python, поэтому эти 2 строки охватывают, вероятно, большинство случаев использования.
Обратите внимание (b), что он работает только в том модуле / скрипте, где вы его определили. Это может быть полезно при написании модуля, поскольку он не связывается с sys.stdout
.
Python 2 не предоставляет аргумент flush
, но вы можете эмулировать функцию print
типа Python 3, как описано здесь https://stackoverflow.com/a/27991478/3734258.