如何刷新Python打印输出?

我建议五种方法:

在Python 3中,调用 print(..., flush=True) (在Python 2的print函数中不提供flush参数,并且print语句没有模拟) .

在输出文件上调用 file.flush() (我们可以用python 2的print函数来执行此操作),例如, sys.stdout

将此应用于具有部分功能的模块中的每个打印函数调用,

print = partial(print, flush=True) 应用于全局模块 .

将此应用程序应用于传递给interpreter命令的标志( -u )

将此应用于环境中的每个python进程 PYTHONUNBUFFERED=TRUE (并取消设置该变量以撤消此操作) .

Python 3.3

使用Python 3.3或更高版本,您只需提供 flush=True 作为 print 函数的关键字参数:

print('foo', flush=True)

Python 2(或<3.3)

他们没有将 flush 参数反向移植到Python 2.7所以如果你're using Python 2 (or less than 3.3), and want code that'兼容2和3,我可以建议以下兼容性代码 . (注意 __future__ 导入必须位于/非常“靠近top of your module”):

from __future__ import print_function

import sys

if sys.version_info[:2] < (3, 3):

old_print = print

def print(*args, **kwargs):

flush = kwargs.pop('flush', False)

old_print(*args, **kwargs)

if flush:

file = kwargs.get('file', sys.stdout)

# Why might file=None? IDK, but it works for print(i, file=None)

file.flush() if file is not None else sys.stdout.flush()

上述兼容性代码将涵盖大多数用途,但对于更彻底的处理,see the six module .

或者,您可以在打印后调用 file.flush() ,例如,使用Python 2中的print语句:

import sys

print 'delayed output'

sys.stdout.flush()

将一个模块中的默认值更改为flush = True

您可以在模块的全局范围内使用functools.partial更改打印功能的默认值:

import functools

print = functools.partial(print, flush=True)

如果你看看我们新的部分函数,至少在Python 3中:

>>> print = functools.partial(print, flush=True)

>>> print

functools.partial(, flush=True)

我们可以看到它像正常一样工作:

>>> print('foo')

foo

我们实际上可以覆盖新的默认值:

>>> print('foo', flush=False)

foo

再次注意,这只会更改当前的全局范围,因为当前全局范围上的打印名称将掩盖内置 print 函数(或者取消引用兼容性函数,如果使用Python 2,则在当前的全局范围内) .

如果你想在一个函数内而不是在一个模块的全局范围内这样做,你应该给它一个不同的名字,例如:

def foo():

printf = functools.partial(print, flush=True)

printf('print stuff like this')

如果在函数中声明它是全局的,那么您将在模块的全局命名空间中更改它,因此您应该将它放在全局命名空间中,除非该特定行为正是您想要的 .

更改进程的默认值

我认为这里最好的选择是使用 -u 标志来获得无缓冲的输出 .

$ python -u script.py

要么

$ python -um package.module

强制stdin,stdout和stderr完全无缓冲 . 在重要的系统上,还将stdin,stdout和stderr置于二进制模式 . 请注意,file.readlines()和File Objects(对于sys.stdin中的行)中存在内部缓冲,不受此选项的影响 . 要解决此问题,您需要在while 1:循环中使用file.readline() .

更改shell操作环境的默认值

如果将环境变量设置为非空字符串,则可以为环境中的所有python进程或从环境继承的环境获取此行为:

例如,在Linux或OSX中:

$ export PYTHONUNBUFFERED=TRUE

或Windows:

C:\SET PYTHONUNBUFFERED=TRUE

PYTHONUNBUFFERED如果将其设置为非空字符串,则相当于指定-u选项 .

附录

这是Python 2.7.12中打印函数的帮助 - 请注意,没有 flush 参数:

>>> from __future__ import print_function

>>> help(print)

print(...)

print(value, ..., sep=' ', end='\n', file=sys.stdout)

Prints the values to a stream, or to sys.stdout by default.

Optional keyword arguments:

file: a file-like object (stream); defaults to the current sys.stdout.

sep: string inserted between values, default a space.

end: string appended after the last value, default a newline.

java如何刷新输出_如何刷新打印功能的输出?相关推荐

  1. vue 添加完数据后刷新页面_页面刷新vuex数据消失

    1.前言 vue构建的项目中,vuex的状态存储是响应式的,当vue组件从store中读取状态的时候,若store中的状态发生变化,那么相应的组件也会得到高效刷新,问题来了,vuex存储的数据只是在页 ...

  2. idea强大功能_强大的打印功能

    自1988年IBM®AS /400®平台问世以来,IBM一直在缓慢但肯定地将增强功能引入操作系统的打印功能. 这些增强功能中的许多增强功能都来得很慢(例如,仅在7.1版中,IBM才提供了将假脱机文件转 ...

  3. 单片机程序配置成开漏输出_单片机I/O开漏输出详解

    开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内). 我们先来说说集电极开路输出的结构.集电极开路输出的结构如 ...

  4. java中自动刷新界面_自动刷新页面

    以上代码加入HEAD区即可. 说明:有人说,我可以使用来刷新当前页面,为什么要用这个脚本呢?是的,的确是这样.但是这个脚本可以在状态栏显示剩余的时间.不管怎样,随您的便.其实这个脚本可以作出其它许多花 ...

  5. Java与indigo打印教学,关于java:如何将“rājshāhi”打印到Eclipse输出控制台?

    我尝试了以下方法: System.out.println("rājshāhi"); new PrintWriter(new OutputStreamWriter(System.ou ...

  6. 怎么调节手机的刷新率_高刷新率屏幕为何开始流行起来?

    刷新率,这个过去在显示行业很少被提及的概念,这两年成为一个热词.为什么显示产品开始重视刷新率了呢? 首先我们看看什么是刷新率.刷新率就是屏幕每秒画面被刷新的次数,其实显示产品显示的画面都是静止的,不过 ...

  7. java 三维数组 魔方_三维数组的横向/纵向输出

    哈哈,对于三维数组,可以想象成一个魔方(立方体). 这个立方体由每层->每层的每行->每层的每行的每列组成. 要实现三位数组横向/纵向的输出,需要遍历每个元素进行输出. 假设数组arrra ...

  8. java csv 双引号_你知道csv中如何输出英文双引号吗-百度经验

    再上一段希望生成上述csv的代码: package chapter4; import java.io.File; import java.io.FileWriter; import java.io.I ...

  9. s71200模拟量输入输出_模拟用户输入并检查输出的简单方法

    s71200模拟量输入输出 最近,我的一些学生向我询问了赫尔辛基大学MOOC提供的单元测试的机制,我检查了它们的实现,并认为这对于初学者了解实际发生的情况是有帮助的,因此在此发表了这篇小文章. 我们将 ...

最新文章

  1. 春天来了,苹果M2芯片3月面世!全线换新,单核性能远超M1 Max
  2. 脚本运行java_shell脚本运行java程序jar
  3. 使用 Github Pages 发布你的项目文档
  4. openlayers入门开发系列之地图属性查询篇
  5. socket通信(C#)
  6. 前端模块化工具--webpack学习心得
  7. android日期选择滚轮框架,GitHub - liwenzhi/wheelview: 滚轮效果的View,日期选择器
  8. 数据结构练习(08)链表中倒数第k个结点
  9. poj 3126 BFS
  10. GitHub 在热门 Node.js changelog 开源库Standard Version中发现 RCE 漏洞
  11. java自动机字符串匹配_【算法】利用有限自动机进行字符串匹配
  12. 安科瑞电力监控系统在教学演示中的应用
  13. 酷炫的JS特效(转载)
  14. IDEA左侧的project目录中,看不到项目的文件结构图,项目目录不见了
  15. Matlab中fft函数的使用与原理
  16. 快乐的强化学习2——DQN及其实现方法
  17. 中本聪论文_浏览器中本机智能卡支持的案例
  18. php递归函数实用吗,php递归函数怎么用才有效
  19. vscode连服务器python拓展出现问题
  20. 最后一刻完成了 UI 的需求--验证码动画

热门文章

  1. BJ 集训测试3 problemA信仰圣光
  2. 学习笔记之python第三方可视化绘图库:pyecharts
  3. cmake gui安装教程_CMake教程 总
  4. 《爱与自由》豆瓣9.3优秀父母的必读书
  5. python打印圣诞树思路+详解简单粗暴实现
  6. 全面预算编制作业指引
  7. ABAQUS获取某一条路径上的数据(位移、应力等)绘制并输出数据?
  8. android 笔记管理app,安卓有什么记笔记的软件?安卓平台好用的笔记app
  9. 7z.001压缩包解压方法。(Window+Linux)
  10. mysql 如何做增量备份_mysql 做增量备份