print()的`flush`是做什么的?

问题描述 投票:25回答:3

print()函数flush有一个布尔型可选参数,默认为False。

文档说这是要强制冲洗流。

我不明白冲洗的概念。这里是在冲水吗?什么是流冲洗?

python python-3.x
3个回答
15
投票

通常输出到文件或控制台被缓冲,至少在输出换行符之前一直输出文本。刷新可确保所有缓冲的输出都将到达目的地。

我确实使用它,例如当我在输入之前输入Do you want to continue (Y/n):之类的用户提示时。

这可以模拟(在使用Python 2.7的Ubuntu 12.4上:]

from __future__ import print_function

import sys
from time import sleep

fp = sys.stdout
print('Do you want to continue (Y/n): ', end='')
# fp.flush()
sleep(5)

如果运行此命令,将看到提示字符串直到睡眠结束并且程序退出后才会显示。如果取消注释行与刷新,您将看到提示,然后必须等待5秒钟,程序才能完成


18
投票

这里有几件事要理解。一是缓冲I / O和未缓冲I / O之间的区别。这个概念非常简单-对于缓冲的I / O,保留了一个内部缓冲区。仅当该缓冲区已满(或发生其他事件,例如到达换行符)时,输出才“刷新”。使用无缓冲的I / O,每当进行一次调用以输出某些内容时,它将一次执行1个字符。

大多数I / O功能属于缓冲类别,主要是出于性能方面的考虑:一次写入块要快得多(所有I / O功能最终都归结为某些描述的syscall,这很昂贵。]

flush允许您手动选择何时要写入此内部缓冲区-调用flush将在缓冲区中写入任何字符。通常,这不是必需的,因为流将自行处理。但是,在某些情况下,您想确保在继续操作之前已经输出了某些内容-您可以在此使用对flush()的调用。


0
投票

非常抱歉,我知道它的作用,但是有人可以对此进行实际应用吗?我知道它可用,但我不明白为什么有人会喜欢使用它。

© www.soinside.com 2019 - 2024. All rights reserved.