源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-10-25 01:12 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:python中stdout输出不缓存的设置方法
考虑以下python程序:
[u]复制代码[/u] 代码如下:
#!/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。 运行这程序,你觉得会输出什么?试验一下,就会发现,其实输出并不是
[u]复制代码[/u] 代码如下:
stdout1 stderr1  stdout2 stderr2
而是:
[u]复制代码[/u] 代码如下:
stderr1 stderr2 stdout1  stdout2
究其原因,是因为缓存:虽然stderr和stdout默认都是指向屏幕的,但是stderr是无缓存的,程序往stderr输出一个字符,就会在屏幕上显示一个;而stdout是有缓存的,只有遇到换行或者积累到一定的大小,才会显示出来。这就是为什么上面的会显示两个stderr的原因了。 然而,有时候,你可能还是希望stdout的行为和stderr一样,能不能实现呢?当然是可以的,而且对于python,实现起来还特别方便,以下是两个方法:
[u]复制代码[/u] 代码如下:
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 被采纳的代码:
[u]复制代码[/u] 代码如下:
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'
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部