flush() 是 Python 中文件对象(包括标准输入输出流如 sys.stdout)的一个方法,用于强制将内部缓冲区中的数据立即写入到目标设备(如磁盘文件或终端)。
为什么要使用 flush()?
Python 的文件写入默认是缓冲的,即数据先暂存在内存缓冲区中,等到缓冲区满了或文件关闭时再真正写入。这样做是为了减少频繁的 I/O 操作,提高效率。但在某些场景下,我们需要数据立即生效,例如:
- 实时查看输出(如打印进度条、日志)。
- 确保写入磁盘,防止程序崩溃丢失数据。
- 交互式程序中,在 input() 提示前刷新输出,确保提示信息显示。
示例
python
import sys
import time
# 不 flush 的情况:可能不会立即显示
print("开始处理...", end="")
# 模拟耗时操作
time.sleep(2)
print("完成") # 前面的"开始处理..."会在这一行输出后才一起显示
# 使用 flush 强制立即输出
print("开始处理...", end="", flush=True)
time.sleep(2)
print("完成")
对于文件操作:
python
with open("log.txt", "w") as f:
f.write("重要信息")
f.flush() # 立即写入磁盘,但操作系统可能仍有缓存
# 此时若程序崩溃,数据可能已经到达操作系统缓冲区,丢失风险降低
注意点
- flush() 并不保证数据物理写入磁盘(操作系统可能还有缓存),但确保数据从 Python 缓冲区传递到操作系统。