首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事

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

发布网友 发布时间:2022-04-23 15:06

我来回答

3个回答

懂视网 时间:2022-05-10 19:01

今天这篇文章我们来了解一下python之中的flush,在进入文章之前我们首先要知道我们要学的是什么东西,今天讲的是pythonflush,了解什么是flush,并且知道flash什么意思。这些东西我们都可以在今天的文章之中进行了解。

概述

flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。

一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。

语法

flush() 方法语法如下:

fileObject.flush();

(该方法没有返回值。)

实例

以下实例演示了 flush() 方法的使用:

# !/usr/bin/python
# -*- coding: UTF-8 -*-

# 打开文件
fo = open("runoob.txt", "wb")
print "文件名为: ", fo.name

# 刷新缓冲区
fo.flush()

# 关闭文件
fo.close()

以上实例输出结果为:

文件名为: runoob.txt

在这次的文章之中,我们了解了什么是flush(),不明白的话其实自己可以动手去试一试,毕竟动手实践才是验证所学的最好的方法与途径。最后我也希望这篇文章能够给正在学习python的你带来一点帮助。

更多相关知识,请访问Gxl网Python教程栏目。

热心网友 时间:2022-05-10 16:09

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()?这样太麻烦了,有啥其他方便的方法吗?

热心网友 时间:2022-05-10 17:27

@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 缓冲区内的内容通过在内容最后加换行符的方式输出

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

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com