все Python 3Файлы и I/Oпонятие
buffering=
параметры open()
Параметр open(), задающий политику буферизации: 0 — без буфера (только бинарный режим), 1 — построчно, >1 — размер буфера в байтах, -1 — системный default.
Синтаксис
open(file, mode='r', buffering=-1)
Пока буфер не заполнен, данные лежат в памяти, а не в файле: если параллельно смотреть лог другой программой или процесс аварийно упал, свежих строк там просто не будет — сбрасывает их flush() или close() (в том числе выход из with). buffering=1 нужен именно для таких «живых» логов, но работает только в текстовом режиме: в бинарном Python выдаст предупреждение и возьмёт обычный размер буфера.
Примеры
# без буфера — только в бинарном режиме
with open('raw.bin', 'wb', buffering=0) as f:
f.write(b'\x00\x01')
# построчная буферизация — только в текстовом режиме
with open('out.txt', 'w', buffering=1) as f:
f.write('строка\n') # уходит на диск на каждом переводе строки
# буфер 4096 байт
with open('out.txt', 'r', buffering=4096) as f:
print(f.read().strip()) # → строка
open('out.txt', 'w', buffering=0) # → ValueError: текст без буфера не бывает
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности