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

2025-02-28 08:23:00
admin
原创
82
摘要:问题描述:做什么sys.stdout.flush()?解决方案 1:Python 的标准输出是缓冲的(这意味着它会在将数据写入终端之前收集“写入”标准输出的一些数据)。调用sys.stdout.flush()会强制它“刷新”缓冲区,这意味着它会将缓冲区中的所有内容写入终端,即使通常它会等待再这样做。 这里有一...

问题描述:

做什么sys.stdout.flush()


解决方案 1:

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

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

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

缓冲与无缓冲 IO

解决方案 2:

考虑以下简单的 Python 脚本:

import time
import sys

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

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

这是因为输出被缓冲了,除非你sys.stdout每次执行后都刷新,否则print你不会立即看到输出。删除行中的注释sys.stdout.flush()即可看到差异。

解决方案 3:

根据我的理解,每当我们执行打印语句时,输出都会写入缓冲区。当缓冲区被刷新(清除)时,我们将在屏幕上看到输出。默认情况下,程序退出时将刷新缓冲区。但我们也可以通过在程序中使用“sys.stdout.flush()”语句手动刷新缓冲区。在下面的代码中,当 i 的值达到 5 时,将刷新缓冲区。

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

chiru@online:~$ cat flush.py
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()
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

解决方案 4:

根据我的理解,sys.stdout.flush() 会将缓冲到该点的所有数据推送到文件对象。使用 stdout 时,数据会存储在缓冲内存中(一段时间或直到内存填满),然后再写入终端。使用 flush() 会强制清空缓冲区,并在缓冲区有空余空间之前写入终端。

解决方案 5:

import sys
for x in range(10000):
    print "HAPPY >> %s <<
" % str(x),
    sys.stdout.flush()

解决方案 6:

你可以看到这两者之间的差异

import sys

for i in range(1,10 ):
    sys.stdout.write(str(i))
    sys.stdout.flush()

for i in range(1,10 ):
    print i

第一种情况,由于使用了刷新,所以每个字符在写入后都会逐个输出。第二种情况,字符会被 Python 缓冲,直到它认为有值得写入的内容,然后再批量写入。

time.sleep(0.2)如果你在循环中添加一个,这一点就会变得更加明显。

解决方案 7:

想象一下,你有一个玩具箱,里面放着你所有的玩具。当你想玩玩具时,你通常会把它从盒子里拿出来,对吗?

类似地,当你在计算机上写东西时,它会被存储在一个称为缓冲区的临时位置。你可以把它想象成一个计算机数据的玩具箱。计算机会等到玩具箱装满后才将数据从盒子中取出并在屏幕上显示给你。

但是,有时您可能想立即玩玩具,而不必等待玩具箱装满其他玩具。这就像在 Python 中调用 sys.stdout.flush() 一样。它告诉计算机立即从缓冲区中取出数据并将其显示在屏幕上,而无需等待缓冲区填满。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2974  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1836  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与管理过程中扮演着至关重要的角色。然而,在实际运行中,资源冲突是经常会遇到的难题。资源冲突可能导致项目进度延迟、成本增加以及产品质量下降等一系列问题,严重影响企业的效益与竞争力。因此,如何有效应对PLM系统中的资源冲突,成为众多企业关注的焦点。接下来,我们将详细探讨5...
plm项目管理系统   47  
  敏捷项目管理与产品生命周期管理(PLM)的融合,正成为企业在复杂多变的市场环境中提升研发效率、增强竞争力的关键举措。随着技术的飞速发展和市场需求的快速更迭,传统的研发流程面临着诸多挑战,而将敏捷项目管理理念融入PLM,有望在2025年实现研发流程的深度优化,为企业创造更大的价值。理解敏捷项目管理与PLM的核心概念敏捷项...
plm项目   47  
  模块化设计在现代产品开发中扮演着至关重要的角色,它能够提升产品开发效率、降低成本、增强产品的可维护性与可扩展性。而产品生命周期管理(PLM)系统作为整合产品全生命周期信息的关键平台,对模块化设计有着强大的支持能力。随着技术的不断发展,到 2025 年,PLM 系统在支持模块化设计方面将有一系列令人瞩目的技术实践。数字化...
plm软件   48  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用