当前位置:  编程技术>python

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

    来源: 互联网  发布时间:2014-10-04

    本文导语:  考虑以下python程序: 代码如下:#!/usr/bin/env pythonimport syssys.stdout.write("stdout1 ")sys.stderr.write("stderr1 ")sys.stdout.write("stdout2 ")sys.stderr.write("stderr2 ")其中的sys.stdout.write也可以换成print。运行这程序,你觉得会输出什么?试验一下,就会...

考虑以下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'


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • python 的httplib.HTTPSConnection(),这个怎么设置超时时间?
  • linux下用eclipse进行开发,尤其打开较大的python代码模块,老是会卡,请问大家有没有好点的解决办法,如能提供具体设置,不胜感激
  • Python时区设置方法与pytz查询时区教程
  • python socket 超时设置 errno 10054
  • python设置检查点简单实现代码
  • python设置windows桌面壁纸的实现代码
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • 让python同时兼容python2和python3的8个技巧分享
  • Python中实现json字符串和dict类型的互转
  • 使用setup.py安装python包和卸载python包的方法
  • python下用os.execl执行centos下的系统时间同步命令ntpdate
  • 不小心把linux自带的python卸载了,导致安装一个依赖原python的软件不能安装,请问该怎么办?
  • Python namedtuple对象json序列化/反序列化及对象恢复
  • Python开发者社区整站源码 Pythoner
  • Python获取网页编码的方法及示例代码
  • python读取csv文件示例(python操作csv)
  • Python异常模块traceback用法举例
  • python基础教程之python消息摘要算法使用示例
  • python之平台独立的调试工具winpdb介绍
  • 新手该如何学python怎么学好python?
  • 基于Python的Html/xml解析库Beautiful Soup 4.2.1发布
  • python学习手册中的python多态示例代码
  • 测试Python内部类型及type和isinstance用法区别
  • 请教:system("C:\python2.4\python.exe C:\aa.py");该语句有何错误?为什么运行界面一闪就消失了并且没有运行完,请给出正确语句!
  • Python3中内置类型bytes和str用法及byte和string之间各种编码转换
  • python版本的问题
  • Python namedtuple(命名元组)使用实例
  • Mac OS X10.9安装的Python2.7升级Python3.3步骤详解


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3