Почему аргумент print сбрасывает значение по умолчанию в False? - PullRequest
0 голосов
/ 26 января 2019

Я использую print для регистрации выполнения моих скриптов на python.

Я использую flush = True везде, потому что в противном случае операторы print иногда не появляются там, где они были размещены.

Я былИнтересно, почему по умолчанию flush = False.Кто-нибудь может объяснить?

Спасибо!

1 Ответ

0 голосов
/ 26 января 2019

Не заставляя flush по умолчанию, вы оставляете это решение базовому объекту, в который пишете. Для sys.stdin / stderr по умолчанию используется строка с буферизацией _io.TextIOWrapper, что обычно соответствует ожиданиям интерактивной консоли. Когда вы меняете вывод для файла, значение по умолчанию не заставляет flush при каждой печати / записи кажется разумным. И наоборот, принудительное выполнение flush после каждой печати отменяет поведение буферизации / очистки базового объекта.

Очевидное предостережение, когда вы, например, запускаете свой скрипт через tee, process' own stdout`, не записывает напрямую в терминал.


Я немного побродил, чтобы посмотреть, есть ли какие-либо текстовые свидетельства относительно мотивации. Добавление ключевого слова flush задокументировано в выпуск 13761 . По-видимому, предложение по умолчанию True для stdout было сделано еще в 2012 году и отклонено (см. В нижней части обсуждения). Я полагаю, что именно здесь можно применить «Дзен Python»: «Особых случаев недостаточно, чтобы нарушать правила». (Никакой специальной обработки только потому, что мы пишем sys.stdout;)

Существует также ссылка в списке рассылки, где сам BDFL заявляет:

Хорошо бы добавить новый аргумент ключевого слова для print () в 3.3 для принудительного сброса при условии, что по умолчанию он выключен.

...