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中循环语句while用法实例
May 16 Python
Python检测网站链接是否已存在
Apr 07 Python
python使用tensorflow保存、加载和使用模型的方法
Jan 31 Python
Python判断两个list是否是父子集关系的实例
May 04 Python
python3 kmp 字符串匹配的方法
Jul 07 Python
Python双向循环链表实现方法分析
Jul 30 Python
[原创]Python入门教程5. 字典基本操作【定义、运算、常用函数】
Nov 01 Python
对Python中list的倒序索引和切片实例讲解
Nov 15 Python
python Tcp协议发送和接收信息的例子
Jul 22 Python
Pytorch 保存模型生成图片方式
Jan 10 Python
matlab 计算灰度图像的一阶矩,二阶矩,三阶矩实例
Apr 22 Python
Python+tkinter实现高清图片保存
Mar 13 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超级全局变量数组小结
2012/10/04 PHP
基于PHP array数组的教程详解
2013/06/05 PHP
php实现设计模式中的单例模式详解
2014/10/11 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
PHP微商城开源代码实例
2019/03/27 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
JavaScript数组去重由慢到快由繁到简(优化篇)
2016/08/26 Javascript
移动端js图片查看器
2016/11/17 Javascript
JS编写函数实现对身份证号码最后一位的验证功能
2016/12/29 Javascript
JQuery异步提交表单与文件上传功能示例
2017/01/12 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
详释JavaScript执行环境与执行栈
2019/04/02 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
2019/10/16 Javascript
详解jQuery中的prop()使用方法
2020/01/05 jQuery
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
[57:22]完美世界DOTA2联赛PWL S2 FTD vs PXG 第二场 11.27
2020/12/01 DOTA
python分析网页上所有超链接的方法
2015/05/08 Python
利用Python学习RabbitMQ消息队列
2015/11/30 Python
Python cookbook(数据结构与算法)找出序列中出现次数最多的元素算法示例
2018/03/15 Python
Python实现八皇后问题示例代码
2018/12/09 Python
python简单实现AES加密和解密
2019/03/28 Python
Python+threading模块对单个接口进行并发测试
2019/06/25 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
解决Python3.7.0 SSL低版本导致Pip无法使用问题
2020/09/03 Python
国际知名军事风格休闲装品牌:Alpha Industries(阿尔法工业)
2017/05/24 全球购物
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
英国医生在线预约:Top Doctors
2019/10/30 全球购物
SAZAC的动物连体衣和动物睡衣:Kigurumi Shop
2020/03/14 全球购物
机械专业毕业生自荐信
2013/11/02 职场文书
员工拾金不昧表扬信
2014/01/09 职场文书
销售经理工作失职检讨书
2014/10/24 职场文书
2016三八妇女节慰问信
2015/11/30 职场文书
html解决浏览器记住密码输入框的问题
2023/05/07 HTML / CSS