この問題は、次の簡単なスクリプトで示されています。
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'
行のバッファリングが成功すると、2 行の印刷の間に 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) 2009-05-23 19:33 i686 Msys
ありがとう、-W。