python中stdout输出不缓存的设置方法


Posted in Python onMay 29, 2014

考虑以下python程序:

#!/usr/bin/env pythonimport 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 相关文章推荐
Python标准库与第三方库详解
Jul 22 Python
python smtplib模块发送SSL/TLS安全邮件实例
Apr 08 Python
Python 爬虫之超链接 url中含有中文出错及解决办法
Aug 03 Python
Python中的默认参数实例分析
Jan 29 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
Feb 13 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
May 16 Python
Python Django Vue 项目创建过程详解
Jul 29 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
Aug 20 Python
在pytorch中对非叶节点的变量计算梯度实例
Jan 10 Python
python实现简单井字棋游戏
Mar 04 Python
MoviePy简介及Python视频剪辑自动化
Dec 18 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 06 Python
python两种遍历字典(dict)的方法比较
May 29 #Python
python中常用的各种数据库操作模块和连接实例
May 29 #Python
从零学Python之入门(五)缩进和选择
May 27 #Python
从零学Python之入门(四)运算
May 27 #Python
一则python3的简单爬虫代码
May 26 #Python
从零学Python之入门(三)序列
May 25 #Python
从零学Python之入门(二)基本数据类型
May 25 #Python
You might like
php+mysql实现无限级分类
2015/11/11 PHP
PHP实现腾讯短网址生成api接口实例
2020/12/08 PHP
js 替换
2008/02/19 Javascript
通过event对象的fromElement属性解决热区设置主实体的一个bug
2008/12/22 Javascript
锋利的jQuery 要点归纳(二) jQuery中的DOM操作(下)
2010/03/23 Javascript
JavaScript使用IEEE 标准进行二进制浮点运算产生莫名错误的解决方法
2011/05/28 Javascript
JavaScript的Date()方法使用详解
2015/06/09 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
jQuery设置和获取select、checkbox、radio的选中值方法
2017/01/01 Javascript
bootstrap IE8 兼容性处理
2017/03/22 Javascript
Javascript中八种遍历方法的执行速度深度对比
2017/04/25 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
nodejs使用redis作为缓存介质实现的封装缓存类示例
2018/02/07 NodeJs
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
基于jQuery实现的设置文本区域的光标位置
2018/06/15 jQuery
JavaScript实现选项卡效果的分析及步骤
2019/04/16 Javascript
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
[03:11]TI9战队档案 - Alliance
2019/08/20 DOTA
Python中的time模块与datetime模块用法总结
2016/06/30 Python
Python实现图片转字符画的示例代码
2017/08/21 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
python 中的list和array的不同之处及转换问题
2018/03/13 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
Django 路由控制的实现
2019/07/17 Python
使用Keras预训练模型ResNet50进行图像分类方式
2020/05/23 Python
html5实现微信打飞机游戏
2014/03/27 HTML / CSS
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
Hertz荷兰:荷兰和全球租车
2018/01/07 全球购物
酒吧副总经理岗位职责
2013/12/10 职场文书
简历自我评价怎么写呢?
2014/01/06 职场文书
学校个人对照检查材料
2014/08/26 职场文书
2014小学生国庆65周年演讲稿
2014/09/21 职场文书
同意报考证明
2015/06/17 职场文书
给校长的建议书范文
2015/09/14 职场文书