在MINGW/MSYS Python 2.7.3上标准输出的行缓冲失败
这个简单的脚本说明了这个问题:在MINGW/MSYS Python 2.7.3上标准输出的行缓冲失败,python,mingw,stdout,output-buffering,msys,Python,Mingw,Stdout,Output Buffering,Msys,这个简单的脚本说明了这个问题: 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上
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中一样
有人能提出解决办法吗
这里有更多的信息:
联阿援助团
MINGW32_NT-6.0 FOO 1.0.11(0.46/3/2)2009-05-23 19:33 i686 Msys
谢谢,
-我的一位同事知道答案 WIN32上不支持行缓冲。如果指定了行缓冲,它将恢复为完全缓冲。无缓冲输出可用,解决方法是在WIN32上使用它。我已经在我的简单测试程序中尝试过了,而且效果很好 参考号: