Как часто Python сбрасывает в файл?

  1. Как часто Python сбрасывает в файл?
  2. Как часто Python сбрасывает к stdout?

Я не уверен приблизительно (1).

Что касается (2), я верю сбросам Python к stdout после каждой новой строки. Но при перегрузке stdout, чтобы быть в файл, он сбрасывает как часто?

207
задан Michael Currie 6 May 2015 в 20:42
поделиться

2 ответа

Для файловых операций Python использует буферизацию операционной системы по умолчанию, если вы не сконфигурируете ее иначе. Вы можете указать размер буфера, без буферизации или с буферизацией строки.

Например, функция open принимает аргумент размера буфера.

http://docs.python.org/library/functions.html#open

«Необязательный аргумент буферизации указывает желаемый размер буфера файла:»

  • 0 означает небуферизованный,
  • 1 означает строковый буфер ,
  • любое другое положительное значение означает использование буфера (приблизительно) этого размера.
  • Отрицательная буферизация означает использование системного значения по умолчанию, которое обычно буферизуется по строкам для устройств tty и полностью буферизуется для других файлов.
  • Если не указано, используется системное значение по умолчанию.

код:

bufsize = 0
f = open('file.txt', 'w', buffering=bufsize)
305
ответ дан 23 November 2019 в 04:42
поделиться

Я не знаю, применимо ли это и к python, но я думаю, что это зависит от операционной системы, в которой вы работаете.

Например, в Linux при выводе на терминал буфер сбрасывается с новой строки, тогда как при выводе в файлы он сбрасывается только при заполнении буфера (по умолчанию). Это связано с тем, что более эффективно очищать буфер меньшее количество раз, и пользователь с меньшей вероятностью заметит, если вывод не сбрасывается на новую строку в файле.

Вы могли бы иметь возможность автоматически очищать вывод, если это то, что вам нужно.

РЕДАКТИРОВАТЬ: Я думаю, вы бы автоматически промыли в python таким образом (на основе из здесь )

#0 means there is no buffer, so all output
#will be auto-flushed
fsock = open('out.log', 'w', 0)
sys.stdout = fsock
#do whatever
fsock.close()
13
ответ дан 23 November 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: