4

这个简单的脚本说明了这个问题:

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。

4

1 回答 1

4

我的一位同事知道答案。

WIN32 不支持行缓冲。如果指定了行缓冲,它将恢复为完全缓冲。无缓冲输出可用,解决方法是在 WIN32 上使用它。我已经在我的简单测试程序中尝试过它,它可以工作。

参考:http: //msdn.microsoft.com/en-us/library/86cebhfs%28v=vs.71%29.aspx

于 2013-01-16T15:09:14.443 回答