python學(xué)習(xí)之 sys.stdout和print

轉(zhuǎn)自:http://blog.csdn.net/wuxiushu/article/details/52358172

sys.stdout?與print??

當(dāng)我們?cè)?Python?中打印對(duì)象調(diào)用print?obj?時(shí)候让蕾,事實(shí)上是調(diào)用了?sys.stdout.write(obj+'\n')??

print?將你需要的內(nèi)容打印到了控制臺(tái)倦西,然后追加了一個(gè)換行符逛揩。print?會(huì)調(diào)用?sys.stdout?的?write?方法??

以下兩行在事實(shí)上等價(jià):??

sys.stdout.write('hello'+'\n')???

print?'hello'??

sys.stdin?與?raw_input??

當(dāng)我們用?raw_input('Input?promption:?')?時(shí),事實(shí)上是先把提示信息輸出商膊,然后捕獲輸入??

以下兩組在事實(shí)上等價(jià):??

hi=raw_input('hello??')? ?


print?'hello??',?#comma?to?stay?in?the?same?line???

hi=sys.stdin.readline()[:-1]?#?-1?to?discard?the?'\n'?in?input?stream??


從控制臺(tái)重定向到文件??

原始的?sys.stdout?指向控制臺(tái)??

如果把文件的對(duì)象的引用賦給?sys.stdout,那么print?調(diào)用的就是文件對(duì)象的?write?方法??

f_handler=open('out.log',?'w')???

sys.stdout=f_handler???

print?'hello'??

#?this?hello?can't?be?viewed?on?concole???

#?this?hello?is?in?file?out.log??

記住矛双,如果你還想在控制臺(tái)打印一些東西的話汪拥,最好先將原始的控制臺(tái)對(duì)象引用保存下來(lái),向文件中打印之后再恢復(fù)?sys.stdout??

__console__=sys.stdout???

#?redirection?start?#???

...???

#?redirection?end???

sys.stdout=__console__??


同時(shí)重定向到控制臺(tái)和文件??

如果我們希望打印的內(nèi)容一方面輸出到控制臺(tái)陋气,另一方面輸出到文件作為日志保存劳吠,那么該怎么辦???

將打印的內(nèi)容保留在內(nèi)存中巩趁,而不是一打印就將?buffer?釋放刷新赴背,那么放到一個(gè)字符串區(qū)域中會(huì)怎樣???

a=''???

sys.stdout=a???

print?'hello'??

OK,上述代碼是無(wú)法正常運(yùn)行的??

Traceback?(most?recent?call?last):?File???

".\hello.py",?line?xx,?in?print?'hello'???

AttributeError:'str'???

object?has?no?attribute'write'??

錯(cuò)誤很明顯凰荚,就是上面強(qiáng)調(diào)過(guò)的燃观,在嘗試調(diào)用?sys.stdout.write()?的時(shí)候,發(fā)現(xiàn)沒(méi)有?write?方法??

另外便瑟,這里之所以提示?attribute?error?而不是找不到函數(shù)等等缆毁,我猜想是因?yàn)?python?將對(duì)象/類(lèi)的函數(shù)指針記錄作為對(duì)象/類(lèi)的一個(gè)屬性來(lái)對(duì)待,只是保留了函數(shù)的入口地址??

既然這樣到涂,那么我們必須給重定向到的對(duì)象實(shí)現(xiàn)一個(gè)?write?方法:??

import?sys???

class?__redirection__:???

def?__init__(self):???

self.buff=''???

self.__console__=sys.stdout???


def?write(self,?output_stream):???

self.buff+=output_stream???


def?to_console(self):???

sys.stdout=self.__console__???

print?self.buff???


def?to_file(self,?file_path):??

f=open(file_path,'w')???

????sys.stdout=f???

print?self.buff???

????f.close()???


def?flush(self):???

self.buff=''???


def?reset(self):???

sys.stdout=self.__console__???


if?__name__=="__main__":???

#?redirection???

??r_obj=__redirection__()???

??sys.stdout=r_obj??


#?get?output?stream???

print?'hello'???

print?'there'???


#?redirect?to?console???

??r_obj.to_console()???


#?redirect?to?file???

r_obj.to_file('out.log')???


#?flush?buffer??

??r_obj.flush()???


#?reset???

??r_obj.reset()??

同樣的脊框,sys.stderr,?sys.stdin?也都可以被重定向到多個(gè)地址,舉一反三的事情就自己動(dòng)手實(shí)踐吧 ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末践啄,一起剝皮案震驚了整個(gè)濱河市浇雹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌屿讽,老刑警劉巖昭灵,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異伐谈,居然都是意外死亡烂完,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)诵棵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)抠蚣,“玉大人,你說(shuō)我怎么就攤上這事履澳∷徽” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵距贷,是天一觀的道長(zhǎng)护侮。 經(jīng)常有香客問(wèn)我,道長(zhǎng)储耐,這世上最難降的妖魔是什么羊初? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮什湘,結(jié)果婚禮上长赞,老公的妹妹穿的比我還像新娘。我一直安慰自己闽撤,他們只是感情好得哆,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著哟旗,像睡著了一般贩据。 火紅的嫁衣襯著肌膚如雪栋操。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天饱亮,我揣著相機(jī)與錄音矾芙,去河邊找鬼。 笑死近上,一個(gè)胖子當(dāng)著我的面吹牛剔宪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播壹无,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼葱绒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了斗锭?” 一聲冷哼從身側(cè)響起地淀,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎岖是,沒(méi)想到半個(gè)月后帮毁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡璧微,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了硬梁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片前硫。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖荧止,靈堂內(nèi)的尸體忽然破棺而出屹电,到底是詐尸還是另有隱情,我是刑警寧澤跃巡,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布危号,位于F島的核電站,受9級(jí)特大地震影響素邪,放射性物質(zhì)發(fā)生泄漏外莲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一兔朦、第九天 我趴在偏房一處隱蔽的房頂上張望偷线。 院中可真熱鬧,春花似錦沽甥、人聲如沸声邦。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)亥曹。三九已至邓了,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間媳瞪,已是汗流浹背骗炉。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留材失,地道東北人痕鳍。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像龙巨,于是被迫代替她去往敵國(guó)和親笼呆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容