考虑以下python程序:

复制代码 代码如下:

#!/usr/bin/env python

import sys

sys.stdout.write("stdout1 ")

sys.stderr.write("stderr1 ")

sys.stdout.write("stdout2 ")

sys.stderr.write("stderr2 ")

其中的sys.stdout.write也可以换成print。

运行这程序,你觉得会输出什么?试验一下,就会发现,其实输出并不是

复制代码 代码如下:

stdout1 stderr1 stdout2 stderr2

而是:

复制代码 代码如下:

stderr1 stderr2 stdout1 stdout2

究其原因,是因为缓存:虽然stderr和stdout默认都是指向屏幕的,但是stderr是无缓存的,程序往stderr输出一个字符,就会在屏幕上显示一个;而stdout是有缓存的,只有遇到换行或者积累到一定的大小,才会显示出来。这就是为什么上面的会显示两个stderr的原因了。

然而,有时候,你可能还是希望stdout的行为和stderr一样,能不能实现呢?当然是可以的,而且对于python,实现起来还特别方便,以下是两个方法:

复制代码 代码如下:

python -u stderr_stdout.py

PYTHONUNBUFFERED=1 python stderr_stdout.py

第一种方法是给python指定 -u 参数,第二种方法是在python运行时,指定 PYTHONUNBUFFERED 环境变量,这两种方法其实是等效的。

当然,也可以在程序的第一行指定 #!/usr/bin/python -u 然后程序加可执行权限来运行,或者把 export PYTHONUNBUFFERED=1 写到 .bashrc 里去。

附:stackoverflow上也有同学遇到类似问题,可以参考一下

地址:http://stackoverflow.com/questions/107705/python-output-buffering

被采纳的代码:

复制代码 代码如下:

class Unbuffered(object):

def __init__(self, stream):

self.stream = stream

def write(self, data):

self.stream.write(data)

self.stream.flush()

def __getattr__(self, attr):

return getattr(self.stream, attr)

import sys

sys.stdout = Unbuffered(sys.stdout)

print 'Hello'

本文标题: python中stdout输出不缓存的设置方法

本文地址: http://www.cppcns.com/jiaoben/python/108957.html

python stdout_python中stdout输出不缓存的设置方法相关推荐

  1. python stdout清空_python中stdout输出不缓存的设置方法

    考虑以下python程序: #!/usr/bin/env python import sys sys.stdout.write("stdout1 ") sys.stderr.wri ...

  2. python stdout_python的stdout输出无缓存

    写扫描器的时候要实现在同一行不断变换文字的扫描状态效果,之前都是调用shell中的printf实现的,感觉比较二,今天正好又遇到这个问题,顺便解决下. print '123' sleep(1) pri ...

  3. python 加注拼音-Python 获取中文字拼音首个字母的方法

    Python:3.5 代码如下: def single_get_first(unicode1): str1 = unicode1.encode('gbk') try: ord(str1) return ...

  4. python怎么识别拼音-Python 获取中文字拼音首个字母的方法

    Python:3.5 代码如下: def single_get_first(unicode1): str1 = unicode1.encode('gbk') try: ord(str1) return ...

  5. python拼音怎么写-Python 获取中文字拼音首个字母的方法

    Python:3.5 代码如下: def single_get_first(unicode1): str1 = unicode1.encode('gbk') try: ord(str1) return ...

  6. python怎么清屏_python实现清屏的方法 Python Shell中清屏一般有两种方法。

    Python Shell 怎样清屏? Python Shell中清屏一般有两种方法. 奈何一个人随着年龄增长,梦想便不复轻盈:他开始用双手掂量生活,更看重果实而非花朵.--叶芝<凯尔特的搏暮&g ...

  7. python tkinter进度条_在python tkinter中Canvas实现进度条显示的方法

    如下所示: from tkinter import * import time #更新进度条函数 def change_schedule(now_schedule,all_schedule): can ...

  8. python打印日历_python输出指定月份日历的方法

    python输出指定月份日历的方法 本文实例讲述了python输出指定月份日历的方法.分享给大家供大家参考.具体实现方法如下: #!/usr/bin/python import calendar ca ...

  9. python二次开发ug_Siemens NX (UG)中对于Python第三方包(函数库)的设置方法

    从NX 10开始,NX Open增加了对Python的支持,使得NX脚本语言的多元性进一步得到扩充.但对于大多数用户来说,选择Python作为脚本语言,主要是想利用Python社区提供的各种函数库或功 ...

最新文章

  1. 团队工具_「管理工具」部门有效管理的5个工具,打造高效团队
  2. QGraphicsWidget收不到鼠标、键盘消息解决
  3. 5阶无向完全图_运动轿跑风 全新上汽名爵5预告图发布
  4. BERT微调效果不佳?不如试试这种大规模预训练模型新范式
  5. ESXI NUMA node 1 has no memory..
  6. 6 个清除 Linux 终端的命令
  7. IMDB排名前100名经典电影
  8. 2018电视剧行业调研报告-趋势篇
  9. CGMB 奔驰钥匙积分 以及 奔驰怪兽详细功能介绍 奔驰调表 奔驰擦空变数箱电脑等等
  10. PDF文件中如何插入页面?分享一个实用小妙招
  11. AMD GPU虚拟化
  12. 你想了解的前端知识都在这里了
  13. MASM32编程完善SysInfo遇到奇怪故障,真切感受全局变量和局部变量之别……
  14. Could not load driver class org.neo4j.ogm.drivers.http.driver.HttpDriver(Neo4j连接用bolt还是http)
  15. 0-1型整数规划—MATLAB数学建模
  16. 世界上最快的浏览器(mxnitro浏览器)
  17. A股日内回转交易意义何在?
  18. 行业分析:什么样的公司有前景?深入分析智力密集型行业公司的类型与特征
  19. 计算机操作系统原理课件,【】计算机操作系统原理与实例分析PPT课件(完整版 全)精品.ppt...
  20. OO第5-7次作业总结

热门文章

  1. bim学习—— 第7章 放置首层门窗
  2. “技术人”频道头条新闻断链
  3. HTML5 localStorage设置失效时间,使用store.js
  4. js跳转到新页面传参以及接收参数的方法
  5. java中impl作用
  6. 二,usb描述符-设备 配置 接口 端点
  7. JavaScript零基础入门 2:JavaScript数据类型简介
  8. JAVA输入学生成绩并输出最高分
  9. 华为P20 Pro:摄影慢动作回放,美好瞬间更清晰
  10. 架构设计必备:时序图说明及画法