手机
当前位置:查字典教程网 >脚本专栏 >python >python中stdout输出不缓存的设置方法
python中stdout输出不缓存的设置方法
摘要:考虑以下python程序:复制代码代码如下:#!/usr/bin/envpythonimportsyssys.stdout.write("s...

考虑以下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输出不缓存的设置方法】相关文章:

python函数返回多个值的示例方法

python生成器的使用方法

python中定义结构体的方法

python批量下载图片的三种方法

python操作MySQL数据库具体方法

Python时区设置方法与pytz查询时区教程

Python列表推导式的使用方法

在python的WEB框架Flask中使用多个配置文件的解决方法

python二叉树遍历的实现方法

python中getattr函数使用方法 getattr实现工厂模式

精品推荐
分类导航