【关于python】请问sys.stdout.flush()是啥意思?一般用在啥地方?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【关于python】请问sys.stdout.flush()是啥意思?一般用在啥地方?相关的知识,希望对你有一定的参考价值。

python的stdout是有缓冲区的,给你个例子你就知道了

import time
import sys

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

这个程序本意是每隔一秒输出一个数字,但是如果把这句话sys.stdout.flush()注释的话,你就只能等到程序执行完毕,屏幕上会一次性输出0,1,2,3,4。

如果你加上sys.stdout.flush(),刷新stdout,这样就能每隔一秒输出一个数字了。


可以用在网络程序中多线程程序,多个线程后台运行,同时要能在屏幕上实时看到输出信息。

追问

明白了,谢谢!
不好意思,我还想多问一句,如果我想看到实时输出,是否脚本中的每个print语句后面都要加上sys.stdout.flush()?这样太麻烦了,有啥其他方便的方法吗?

参考技术A

@luotuo512 的回答提及了一些基本概念,不过举例不是特别恰当。

    我们需要知道,python 中,输出到命令行中实际被我们看到的内容都是经由 sys.stdout()

    输出的。而众所周知的 print ( python3 中变为 print()函数)其实是执行了

    stdout.write( content + "\\n" )

    而 stdout 有缓冲区,即不会每一次写入就输出内容,而是会在得到相应的指令后才将

    缓冲区中的内容输出到目标

    sys.stdout.flush() 的作用就是显式地命令 stdout 输出缓冲区的内容

    在 Linux 上, 使用 python 时,@luotuo512 的实例是没有问题的。

    在 Linux 上, 使用 python3 时,应将实例中的 

    print i,  

    改为 

    print(i, end='')

    才会有效果。

    其实,要令 stdout 输出缓冲区内的内容, 不只有 stdout.flush() 方法。

    (划重点)如果缓冲区的内容中新增了换行符,那么 stdout 就会自动将缓冲区内的内容

    输出!

    像下面这样:

    原来: stdout 的缓冲区中有: "contentndicn  djsnxn  sknznain   dn ciand"

    现在我们调用 stdout.write("\\n") , 缓冲区中内容变为

    "contentndicn  djsnxn  sknznain   dn ciand\\n", stdout 检测到缓冲区内容以换行符

    结尾,它就会直接将缓冲区内容输出,不需要显式调用 stdout.flush() 方法。

    然后,在 python 中,print 后自动会接换行符;python3 中, print() 有一个默认的

    关键字参数 end="\\n" (看形参已经可以知道用途了:这个关键字参数就是在内容后面

    默认接的东西)

    所以正常使用 print 时, print 会默认接换行符,也就是默认将缓冲区内的内容全部输出

    而当我们用 print, (就是连续输出,中间不接换行符)或是 print( 内容, end=" ")

    时,print 就不会自动将 stdout 缓冲区内的内容通过在内容最后加换行符的方式输出

    最后,关于不同系统适应性的问题,这就是因为不同系统换行符不同啦

求助关于python的一些问题


如图这是运行时出现的问题,本人新手才开始学习python,劳烦各位大佬能详细解释下
具体代码我截图放在下面


还有一个问题我想请问下,就是这段代码运行以后 它调用摄像头拍照但是窗口一闪而过就没了 我应该加些什么东西呢,谢谢。

以上是关于【关于python】请问sys.stdout.flush()是啥意思?一般用在啥地方?的主要内容,如果未能解决你的问题,请参考以下文章

关于python递归函数怎样理解

请问python是啥意思

请问python可不可以求偏导啊?

# yyds干货盘点 # Python网络爬虫中重新请求,请问有什么比较好的解决方法?

请问以下JAVA说明应该怎样操作?关于调用dll的.谢谢了,大神帮忙啊

求助关于python的一些问题