系統:windows為主
python 版本:2.7
1. 背景
在Python中,文件對象sys.stdin
、sys.stdout
和sys.stderr
分別對應解釋器的標准輸入、標准輸出和標准出錯流。在程序啟動時,這些對象的初值由sys.__stdin__
、sys.__stdout__
和sys.__stderr__
保存,以便用於收尾(finalization)時恢復標准流對象。
print語句默認寫入標准輸出流,也可重定向至文件或其他可寫對象(所有提供write方法的對象)。這樣,就可以使用簡潔的print語句代替笨拙的object.write('hello'+'\n')
寫法。因此,在python中調用 print obj 打印對象時,缺省情況下等效於調用sys.stdout.write(obj+'\n').
注意:print語句不以逗號為結尾時,會在輸出字符串尾部自動附加一個換行符('\n');以逗號結尾時,則用一個空格代替附加的換行符。
2. 重定向
2.1 控制台重定向(>和>>)
最簡單常用的輸出重定向方式是利用控制台命令。這種重定向由控制台完成,而與Python本身無關。
Windows命令提示符(cmd.exe)和Linux Shell(bash等)均通過">"或">>"將輸出重定向。其中,">"表示覆蓋內容,">>"表示追加內容。類似地,"2>"可重定向標准錯誤。重定向到"nul"(Windows)或"/dev/null"(Linux)會抑制輸出,既不屏顯也不存盤。
以Windows命令提示符為例,將語句寫入python腳本"test.py",並將python腳本輸出重定向到文件"out.txt":
注意:type命令可直接顯示文本文件的內容,類似Linux系統的cat命令。
(未實測)Linux Shell中執行python腳本時,命令行應以"python"開頭(實測中windows cmd也需要這樣做)。除">"或">>"重定向外,還可使用tee命令。該命令可將內容同時輸出到終端屏幕和(多個)文件中,"-a"選項表示追加寫入,否則覆蓋寫入。示例如下(echo $SHELL
或echo $0
顯示當前所使用的Shell):
注意:控制台重定向的影響是全局性的,僅適用於比較簡單的輸出任務。
2.2 print >> 重定向
這種方式基於print語句的擴展形式,即"print >> obj, expr
"。其中,obj
為一個file-like(尤其是提供write方法的)對象,為None時對應標准輸出(sys.stdout)。expr
將被輸出到該文件對象中。
實例:寫一個腳本保存為test.py
1 #!/usr/bin/python 2 #-*- coding:utf-8 -*- 3 4 import StringIO,cStringIO,sys 5 memo=cStringIO.StringIO() 6 serr=sys.stderr 7 file=open('out.txt','w+') 8 print >> memo,'StringIO' 9 print >> serr,'stderr' 10 print >> file,'file' 11 print >> None,memo.getvalue()
屏顯:"serr"和"StringIO"(兩行),out.txt文件內寫入"file"
未完待續。。。
參考:
http://www.jb51.net/article/90506.htm