这个简单的脚本说明了这个问题:
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) 2009-05-23 19:33 i686 Msys
谢谢,-W。