【关于python】请问sys.stdout.flush()是啥意思?一般用在啥地方?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【关于python】请问sys.stdout.flush()是啥意思?一般用在啥地方?相关的知识,希望对你有一定的参考价值。
python的stdout是有缓冲区的,给你个例子你就知道了
import timeimport 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()?这样太麻烦了,有啥其他方便的方法吗?
@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()是啥意思?一般用在啥地方?的主要内容,如果未能解决你的问题,请参考以下文章
# yyds干货盘点 # Python网络爬虫中重新请求,请问有什么比较好的解决方法?