Я не уверен приблизительно (1).
Что касается (2), я верю сбросам Python к stdout после каждой новой строки. Но при перегрузке stdout, чтобы быть в файл, он сбрасывает как часто?
Для файловых операций Python использует буферизацию операционной системы по умолчанию, если вы не сконфигурируете ее иначе. Вы можете указать размер буфера, без буферизации или с буферизацией строки.
Например, функция open принимает аргумент размера буфера.
http://docs.python.org/library/functions.html#open
«Необязательный аргумент буферизации указывает желаемый размер буфера файла:»
код:
bufsize = 0
f = open('file.txt', 'w', buffering=bufsize)
Я не знаю, применимо ли это и к 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()