Проблема иллюстрируется этим простым скриптом:
import time, os, sys
sys.stdout = os.fdopen( sys.stdout.fileno(), 'w', 1 ) # line-buffer stdout
print 'before sleep'
time.sleep( 10 )
print 'after sleep'
Если буферизация строк выполнена успешно, между печатью двух строк будет 10-секундный интервал. В противном случае обе строки появятся практически одновременно после 10-секундной паузы (после запуска Python); то есть строки печатаются при выходе из программы.
В Linux я вижу линейную буферизацию как для файла, так и для экрана, если включена строка «sys.stdout». Без этой строки я вижу линейно-буферизованное поведение на экране, но не в файле. Это ожидаемо.
В среде MSYS/MINGW, если я опускаю строку «sys.stdout», я вижу то же поведение, что и в Linux: буферизация строк на экране, а не в файле.
Что странно, так это то, что с строкой "sys.stdout" я не вижу буферизации строк для ни экрана, ни файла. Я ожидаю увидеть это в обоих, как и в Linux.
Может ли кто-нибудь предложить обходной путь?
Вот еще немного информации:
uname -a MINGW32_NT-6.0 FOO 1.0.11(0.46/3/2) 23 мая 2009 г. 19:33 i686 Msys
Спасибо, -В.