python中stdout輸出不緩存的設(shè)置方法
考慮以下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)行這程序,你覺(jué)得會(huì)輸出什么?試驗(yàn)一下,就會(huì)發(fā)現(xiàn),其實(shí)輸出并不是
stdout1 stderr1 stdout2 stderr2
而是:
stderr1 stderr2 stdout1 stdout2
究其原因,是因?yàn)榫彺妫弘m然stderr和stdout默認(rèn)都是指向屏幕的,但是stderr是無(wú)緩存的,程序往stderr輸出一個(gè)字符,就會(huì)在屏幕上顯示一個(gè);而stdout是有緩存的,只有遇到換行或者積累到一定的大小,才會(huì)顯示出來(lái)。這就是為什么上面的會(huì)顯示兩個(gè)stderr的原因了。
然而,有時(shí)候,你可能還是希望stdout的行為和stderr一樣,能不能實(shí)現(xiàn)呢?當(dāng)然是可以的,而且對(duì)于python,實(shí)現(xiàn)起來(lái)還特別方便,以下是兩個(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)限來(lái)運(yùn)行,或者把 export PYTHONUNBUFFERED=1 寫到 .bashrc 里去。
附:stackoverflow上也有同學(xué)遇到類似問(wèn)題,可以參考一下
地址: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'
相關(guān)文章
Python3使用TCP編寫一個(gè)簡(jiǎn)易的文件下載器功能
這篇文章主要介紹了Python3使用TCP編寫一個(gè)簡(jiǎn)易的文件下載器功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-05-05python練習(xí)之循環(huán)控制語(yǔ)句 break 與 continue
這篇文章主要介紹了python循環(huán)控制語(yǔ)句 break 與 continue,break就像是終止按鍵,不管執(zhí)行到哪一步,只要遇到break,不管什么后續(xù)步驟,直接跳出當(dāng)前循環(huán)2022-06-06用pandas中的DataFrame時(shí)選取行或列的方法
今天小編就為大家分享一篇用pandas中的DataFrame時(shí)選取行或列的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07python通過(guò)tcp發(fā)送xml報(bào)文的方法
今天小編就為大家分享一篇python通過(guò)tcp發(fā)送xml報(bào)文的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12python實(shí)現(xiàn)批量獲取指定文件夾下的所有文件的廠商信息
這篇文章主要介紹了python實(shí)現(xiàn)批量獲取指定文件夾下的所有文件的廠商信息的方法,是非常實(shí)用的技巧,涉及到文件的讀寫與字典的操作等技巧,需要的朋友可以參考下2014-09-09解決Python?出現(xiàn)File?“<stdin>“,?line?1非語(yǔ)法錯(cuò)誤的問(wèn)題
這篇文章主要介紹了Python?出現(xiàn)File?“<stdin>“,?line?1非語(yǔ)法錯(cuò)誤的解決辦法,本文給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03Python詳解argparse參數(shù)模塊之命令行參數(shù)
這篇文章主要介紹了Python詳解argparse參數(shù)模塊之命令行參數(shù),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考下面文章詳解2022-07-07python利用百度AI實(shí)現(xiàn)文字識(shí)別功能
這篇文章主要為大家詳細(xì)介紹了python利用百度AI實(shí)現(xiàn)文字識(shí)別,主要涉及通用文字識(shí)別、網(wǎng)絡(luò)圖片文字識(shí)別、身份證識(shí)別等文字識(shí)別功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11Django數(shù)據(jù)映射(一對(duì)一,一對(duì)多,多對(duì)多)
本文主要介紹了Django數(shù)據(jù)映射(一對(duì)一,一對(duì)多,多對(duì)多),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08