wch*_*hlm 4 python mingw stdout msys output-buffering
这个简单的脚本说明了这个问题:
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。
我的一位同事知道答案。
WIN32 不支持行缓冲。如果指定了行缓冲,它将恢复为完全缓冲。无缓冲输出可用,解决方法是在 WIN32 上使用它。我已经在我的简单测试程序中尝试过它,并且它有效。
参考:http://msdn.microsoft.com/en-us/library/86cebhfs%28v=vs.71%29.aspx
| 归档时间: | 
 | 
| 查看次数: | 1175 次 | 
| 最近记录: |