3 回答

TA贡献1785条经验 获得超8个赞
考虑以下简单的Python脚本:
import time
import sys
for i in range(5):
print(i),
#sys.stdout.flush()
time.sleep(1)
这是为了打印每秒五秒钟一个号码,你要是跑不过它,因为它是现在(取决于默认的系统缓存),你可能看不到任何输出,直到脚本完成,然后一下子你会看到0 1 2 3 4印到屏幕。
这是因为输出正在缓冲中,除非sys.stdout每次刷新后print您都不会立即看到输出。从sys.stdout.flush()行中删除注释以查看区别。

TA贡献1829条经验 获得超6个赞
根据我的理解,无论何时执行打印语句,输出都会写入缓冲区。当缓冲区被刷新(清除)时,我们将在屏幕上看到输出。默认情况下,程序退出时将刷新缓冲区。但是我们也可以通过在程序中使用“ sys.stdout.flush()”语句来手动刷新缓冲区。在下面的代码中,当i的值达到5时,将刷新代码缓冲区。
您可以通过执行以下代码来理解。
chiru @ online:〜$ 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 @ online:〜$
*****输出*****
chiru @ online:〜$ 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
chiru @ online:〜$
添加回答
举报