使用sys.stdout.flush()方法

sys.stdout.flush()做什么的?

Python的标准输出被缓冲(意味着它在将数据写入terminal之前收集一些“写入”标准的数据)。 调用sys.stdout.flush()强制它“刷新”缓冲区,这意味着它将把缓冲区中的所有内容写入terminal,即使通常它会在这之前等待。

下面是关于(未)缓冲I / O的一些很好的信息,以及为什么它很有用:
http://en.wikipedia.org/wiki/Data_buffer
缓冲与非缓冲IO

考虑以下简单的Python脚本:

 import time import sys for i in range(5): print i, #sys.stdout.flush() time.sleep(1) 

这被devise为每秒打印一个数字五秒钟,但如果现在运行它(取决于您的默认系统缓冲),您可能看不到任何输出,直到脚本完成,然后一次,你会看到0 1 2 3 4印在屏幕上。

这是因为输出被caching,除非在每次print后刷新sys.stdout ,否则不会立即看到输出。 从sys.stdout.flush()行删除注释以查看其差异。

根据我的理解,当我们执行打印语句输出时,将被写入缓冲区。 当缓冲区被刷新(清除)时,我们将在屏幕上看到输出。 默认情况下,当程序退出时,缓冲区将被刷新。 但是我们也可以通过在程序中使用“sys.stdout.flush()”语句来手动刷新缓冲区。 在下面的代码中,当i的值达到5时,缓冲区将被刷新。

你可以通过执行下面的代码来理解。

chiru @在线:〜$ cat flush.py

 import time import sys for i in range(10): print i if i == 5: print "Flushing buffer" sys.stdout.flush() time.sleep(1) for i in range(10): print i, if i == 5: print "Flushing buffer" sys.stdout.flush() 

藏羚羊@在线:〜$

*****输出*****

chiru @在线:〜$ python flush.py

 0 1 2 3 4 5 Flushing buffer 6 7 8 9 0 1 2 3 4 5 Flushing buffer 6 7 8 9 

藏羚羊@在线:〜$

 import sys for x in range(10000): print "HAPPY >> %s <<\r" % str(x), sys.stdout.flush()