sys.stdout.flush()
是做什么的?
原文由 I159 发布,翻译遵循 CC BY-SA 4.0 许可协议
考虑以下简单的 Python 脚本:
import time
import sys
for i in range(5):
print(i),
#sys.stdout.flush()
time.sleep(1)
这被设计为每秒打印一个数字,持续五秒钟,但如果你现在运行它(取决于你的默认系统缓冲),你可能在脚本完成之前看不到任何输出,然后你会立即看到 0 1 2 3 4
打印到屏幕上。
这是因为输出正在被缓冲,除非您在每个 print
sys.stdout
,否则您不会立即看到输出。从 sys.stdout.flush()
行中删除注释以查看差异。
原文由 Andrew Clark 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答3.1k 阅读✓ 已解决
2 回答1.9k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
2 回答1.8k 阅读✓ 已解决
4 回答1.9k 阅读
3 回答1.7k 阅读
1 回答1.4k 阅读✓ 已解决
Python 的标准输出是缓冲的(这意味着它会在将数据写入终端之前收集一些“写入”到标准输出的数据)。调用
sys.stdout.flush()
强制它“刷新”缓冲区,这意味着它会将缓冲区中的所有内容写入终端,即使通常它会在这样做之前等待。以下是有关(非)缓冲 I/O 及其有用原因的一些有用信息:
http://en.wikipedia.org/wiki/Data_buffer
缓冲与非缓冲 IO