Python - sys.stdout.flush()
数据缓冲区是物理内存存储区域,用于在数据从一个地方移动到另一个地方时临时存储数据。数据在从输入设备检索时或在发送到输出设备之前或在计算机内的进程之间移动数据时存储在缓冲区中。 Python 的标准输出是缓冲的。这意味着它会在将数据写入标准输出之前收集一些数据,当缓冲区被填满时,它会被写入终端或任何其他输出流。
让我们看看下面的代码:
# Python3 program demonstrating working
# of flush during output
import sys
import time
for i in range(10):
print(i)
time.sleep(1)
输出:
0
1
2
3
4
5
6
7
8
9
执行上述程序时,每隔一秒将0到9的数字打印在新的一行上,即自动刷新输出。这是因为,默认情况下,print 语句的 end 参数设置为 '\n',它会刷新输出。
现在让我们看看下面的代码:
# Python3 program demonstrating working
# of flush during output
import sys
import time
for i in range(10):
print(i, end =' ')
time.sleep(1)
输出:
0 1 2 3 4 5 6 7 8 9
执行上述程序时,前 9 秒没有输出,然后在第 10 秒,从 0 到 9 的所有 10个数字同时出现在以空格分隔的一行中。这是因为输出是缓冲的,并且不会以任何方式刷新。
现在,看看下面的代码:
# Python3 program demonstrating working
# of flush during output and usage of
# sys.stdout.flush() function
import sys
import time
for i in range(10):
print(i, end =' ')
sys.stdout.flush()
time.sleep(1)
输出:
0 1 2 3 4 5 6 7 8 9
执行上述程序时,从 0 到 9 的数字每秒打印在同一行上,以空格分隔。这是因为调用sys.stdout.flush()
会强制它“刷新”缓冲区,这意味着它会将缓冲区中的所有内容写入终端,即使通常它会在这样做之前等待。 sys 模块提供了用于操作Python运行时环境的不同部分的函数和变量。它让我们可以访问系统特定的参数和功能。
实现与上述相同功能的另一种方法是将 print 语句的 flush 参数设置为 true。
# Python3 program demonstrating working
# of flush during output and usage of
# flush parameter of print statement
import sys
import time
for i in range(10):
print(i, end =' ', flush = True)
time.sleep(1)
输出:
0 1 2 3 4 5 6 7 8 9