国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python中stdout輸出不緩存的設置方法

2019-11-25 18:24:35
字體:
來源:轉載
供稿:網友

考慮以下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'

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 本溪市| 嘉义县| 金坛市| 柏乡县| 海盐县| 甘南县| 武定县| 江达县| 苍南县| 东台市| 荔浦县| 凯里市| 嘉禾县| 虞城县| 舟山市| 天柱县| 城步| 万载县| 许昌县| 越西县| 通化市| 高青县| 平谷区| 革吉县| 迭部县| 东平县| 武城县| 垣曲县| 临沭县| 西充县| 手机| 北辰区| 亳州市| 澄城县| 宜兰县| 榆社县| 藁城市| 朝阳县| 饶阳县| 秭归县| 广宁县|