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

首頁 > 編程 > Python > 正文

python中stdout輸出不緩存的設(shè)置方法

2020-02-23 05:24:58
字體:
供稿:網(wǎng)友

考慮以下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。
運(yùn)行這程序,你覺得會(huì)輸出什么?試驗(yàn)一下,就會(huì)發(fā)現(xiàn),其實(shí)輸出并不是
代碼如下:
stdout1 stderr1  stdout2 stderr2
而是:
代碼如下:
stderr1 stderr2 stdout1  stdout2
究其原因,是因?yàn)榫彺妫弘m然stderr和stdout默認(rèn)都是指向屏幕的,但是stderr是無緩存的,程序往stderr輸出一個(gè)字符,就會(huì)在屏幕上顯示一個(gè);而stdout是有緩存的,只有遇到換行或者積累到一定的大小,才會(huì)顯示出來。這就是為什么上面的會(huì)顯示兩個(gè)stderr的原因了。
然而,有時(shí)候,你可能還是希望stdout的行為和stderr一樣,能不能實(shí)現(xiàn)呢?當(dāng)然是可以的,而且對(duì)于python,實(shí)現(xiàn)起來還特別方便,以下是兩個(gè)方法:
代碼如下:
python -u stderr_stdout.py
PYTHONUNBUFFERED=1 python stderr_stdout.py
第一種方法是給python指定 -u 參數(shù),第二種方法是在python運(yùn)行時(shí),指定 PYTHONUNBUFFERED 環(huán)境變量,這兩種方法其實(shí)是等效的。
當(dāng)然,也可以在程序的第一行指定 #!/usr/bin/python -u 然后程序加可執(zhí)行權(quán)限來運(yùn)行,或者把 export PYTHONUNBUFFERED=1 寫到 .bashrc 里去。


附:stackoverflow上也有同學(xué)遇到類似問題,可以參考一下

地址: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'

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 富民县| 封开县| 额尔古纳市| 微山县| 山东省| 巴林右旗| 乌鲁木齐县| 阳西县| 大名县| 丹东市| 金华市| 郁南县| 武鸣县| 安阳县| 夹江县| 新丰县| 新邵县| 武川县| 马关县| 葫芦岛市| 宁国市| 垦利县| 天全县| 永年县| 鄂州市| 长顺县| 措勤县| 明星| 宁河县| 调兵山市| 张家口市| 巨鹿县| 新津县| 鲁山县| 磴口县| 沾益县| 深水埗区| 乌兰浩特市| 旬邑县| 松潘县| 湖南省|