我正在阅读python中的std.flush()。我发现了很多这个例子。
import sys,time
for i in range(10):
print i,
#sys.stdout.flush()
time.sleep(1)
人们常说,有/没有" sys.stdout.flush()"它会有所不同。 但是,当我从命令提示符调用此脚本时,它对我的情况没有任何影响。两个打印的数字都实时显示在屏幕上。 我在windows中使用了python 2.7.5。
为什么会这样?
P.S。在另一个通过subprocess.PIPE而不是直接打印输出的例子中,我确实观察到了缓冲的不同。
我错过了什么?
答案 0 :(得分:2)
使用flush
通常保证刷新已完成,但假设反向关系是逻辑谬误,类似于:
换句话说,不使用flush
并不能保证不会发生冲洗。
有趣的是,在Win81中使用Cygwin下的Python 2.7.8,我看到了相反的行为 - 一切都被批量化直到最后。它可能与Windows原生Python不同,它也可能与IDLE中的不同。
答案 1 :(得分:1)
见stdio
buffering。简而言之:
默认缓冲模式:
- stdin总是被缓冲
- stderr始终无缓冲
- 如果stdout是终端,则缓冲自动设置为行缓冲,否则设置为缓冲
对我来说,你给出的例子是:
在cmd
:
在mintty
:
-u
选项sys.stdout.isatty()
返回False
!因此,当msvcrt
stdout
指向终端时,它看起来是无缓冲的。使用简单C程序进行的测试显示了相同的行为。