最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-27 14:38:28
文档

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

python中stdout输出不缓存的设置方法:考虑以下python程序: 代码如下:#!/usr/bin/env pythonimport syssys.stdout.write(stdout1 )sys.stderr.write(stderr1 )sys.stdout.write(stdout2 )sys.stderr.write(stderr2 )其中的sys.stdou
推荐度:
导读python中stdout输出不缓存的设置方法:考虑以下python程序: 代码如下:#!/usr/bin/env pythonimport syssys.stdout.write(stdout1 )sys.stderr.write(stderr1 )sys.stdout.write(stdout2 )sys.stderr.write(stderr2 )其中的sys.stdou


考虑以下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中stdout输出不缓存的设置方法:考虑以下python程序: 代码如下:#!/usr/bin/env pythonimport syssys.stdout.write(stdout1 )sys.stderr.write(stderr1 )sys.stdout.write(stdout2 )sys.stderr.write(stderr2 )其中的sys.stdou
推荐度:
标签: 方法 缓存 输出
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top