zoukankan      html  css  js  c++  java
  • python无缓存(转载)

    reference:http://luy.li/2010/08/29/pythonunbuffered/#comment-11451

    考虑以下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 里去。

  • 相关阅读:
    安全探讨之用Win32汇编写双进程守护
    LightTPD 1.4.12
    mysql4存在mysql5没有的性能成绩
    gcolor2-拾色器
    solaris 中挂载usb移动硬盘
    Browsershots:测试你的 Web 企图
    MythTV 0.20
    XorgEdit:xorg.conf 编纂器
    pci168c,1c无线网卡如何在64位Solaris系统上运用
    Fedora8中批改磁盘卷标
  • 原文地址:https://www.cnblogs.com/lexus/p/1831230.html
Copyright © 2011-2022 走看看