使用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()