python中stdout輸出不緩存的設置方法
更新時間:2014年05月29日 10:56:01 作者:
這篇文章主要介紹了python中stdout輸出不緩存的設置方法,這個方法只在比較特殊的環(huán)境中使用,需要的朋友可以參考下
考慮以下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。
運行這程序,你覺得會輸出什么?試驗一下,就會發(fā)現(xiàn),其實輸出并不是
復制代碼 代碼如下:
stdout1 stderr1 stdout2 stderr2
而是:
復制代碼 代碼如下:
stderr1 stderr2 stdout1 stdout2
究其原因,是因為緩存:雖然stderr和stdout默認都是指向屏幕的,但是stderr是無緩存的,程序往stderr輸出一個字符,就會在屏幕上顯示一個;而stdout是有緩存的,只有遇到換行或者積累到一定的大小,才會顯示出來。這就是為什么上面的會顯示兩個stderr的原因了。
然而,有時候,你可能還是希望stdout的行為和stderr一樣,能不能實現(xiàn)呢?當然是可以的,而且對于python,實現(xiàn)起來還特別方便,以下是兩個方法:
復制代碼 代碼如下:
python -u stderr_stdout.py
PYTHONUNBUFFERED=1 python stderr_stdout.py
第一種方法是給python指定 -u 參數(shù),第二種方法是在python運行時,指定 PYTHONUNBUFFERED 環(huán)境變量,這兩種方法其實是等效的。
當然,也可以在程序的第一行指定 #!/usr/bin/python -u 然后程序加可執(zhí)行權(quán)限來運行,或者把 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實現(xiàn)提取XML內(nèi)容并保存到Excel中的方法
這篇文章主要介紹了Python實現(xiàn)提取XML內(nèi)容并保存到Excel中的方法,涉及Python針對xml文件的讀取、解析以及Excel文件的寫入、保存等相關操作技巧,需要的朋友可以參考下2018-09-09
Python解決拋小球問題 求小球下落經(jīng)歷的距離之和示例
這篇文章主要介紹了Python解決拋小球問題 求小球下落經(jīng)歷的距離之和,涉及Python基于遞歸的數(shù)值計算相關操作技巧,需要的朋友可以參考下2018-02-02
python實現(xiàn)學生信息管理系統(tǒng)(面向?qū)ο?
這篇文章主要介紹了python實現(xiàn)面向?qū)ο蟀鎸W生信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-06-06
python使用rabbitmq實現(xiàn)網(wǎng)絡爬蟲示例
這篇文章主要介紹了python使用RabbitMQ實現(xiàn)網(wǎng)絡爬蟲的示例,需要的朋友可以參考下2014-02-02

