首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sys.stdout.flush()方法的用法

sys.stdout.flush()方法的用法
EN

Stack Overflow用户
提问于 2012-04-05 05:22:57
回答 6查看 219.7K关注 0票数 206

sys.stdout.flush()是做什么的?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-04-05 05:35:18

Python的标准输出是缓冲的(这意味着在将数据写入终端之前,它会收集一些“写入”标准输出的数据)。调用sys.stdout.flush()会强制它“刷新”缓冲区,这意味着它会将缓冲区中的所有内容写入终端,即使通常它会在这样做之前等待。

这里有一些关于(非)缓冲I/O的好信息,以及它为什么有用:

http://en.wikipedia.org/wiki/Data_buffer

Buffered vs unbuffered IO

票数 208
EN

Stack Overflow用户

发布于 2012-04-05 05:34:49

考虑以下简单的Python脚本:

代码语言:javascript
运行
复制
import time
import sys

for i in range(5):
    print(i),
    #sys.stdout.flush()
    time.sleep(1)

这被设计为每秒打印一个数字,持续5秒,但是如果您现在运行它(取决于您的默认系统缓冲),您可能在脚本完成之前看不到任何输出,然后您将立即看到0 1 2 3 4打印到屏幕上。

这是因为输出是缓冲的,除非您在每次print之后刷新sys.stdout,否则您不会立即看到输出。删除sys.stdout.flush()行中的注释以查看差异。

票数 140
EN

Stack Overflow用户

发布于 2015-10-27 17:41:22

据我所知,当我们执行print语句时,输出将被写到buffer中。当缓冲区被刷新(清除)时,我们将在屏幕上看到输出。默认情况下,当程序退出时,缓冲区将被刷新。但我们也可以在程序中使用"sys.stdout.flush()“语句手动刷新缓冲区。在下面的代码中,当i的值达到5时,缓冲区将被刷新。

你可以通过执行下面的代码来理解。

代码语言:javascript
运行
复制
chiru@online:~$ cat flush.py
代码语言:javascript
运行
复制
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()
代码语言:javascript
运行
复制
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
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10019456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档