Python: значение опции -u?

В каком-то коде питона я заметил, что -u используется для запуска интерпретатора python. Я посмотрел на страницу руководства для python, но я не мог многое из этого сделать. Просьба привести несколько примеров.

Ответы

Ответ 1

От python --help:

-u     : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x
         see man page for details on internal buffering relating to '-u'

В manpage указано:

-u     Force  stdin,  stdout and stderr to be totally unbuffered.  On systems where it matters, also put stdin,
       stdout and stderr in binary mode.  Note that there is internal buffering  in  xreadlines(),  readlines()
       and  file-object  iterators  ("for  line in sys.stdin") which is not influenced by this option.  To work
       around this, you will want to use "sys.stdin.readline()" inside a "while 1:" loop.

Python открывает потоки stdin, -out и -error в буферизованном режиме; он будет читать или писать в больших кусках, сохраняя данные в памяти до тех пор, пока не будет достигнут порог. -u отключает эти буферы.

Кроме того, python может интерпретировать новые строки в открытых файлах и переводить их с и на новую строку новой строки (текстовый режим). Опция -u отключает этот перевод, позволяя обрабатывать двоичные данные, не беспокоясь о том, что может произойти с комбинациями \r\n. Это эквивалентно использованию режимов rb или wb при открытии файлов с помощью функции open().

Ответ 2

Python оптимизирован для чтения и печати большого количества данных. Одна из этих оптимизаций заключается в том, что стандартный ввод и вывод интерпретатора Python buffered. Это означает, что всякий раз, когда программа пытается использовать один из этих потоков, интерпретируемые блокируют использование в больших кусках, а затем отправляют куски за один раз. Это быстрее, чем отправка каждого отдельного чтения/записи через отдельно, но, очевидно, имеет тот недостаток, что данные могут "задерживаться" посередине.

Флаг -u отключает это поведение.