python--幾種標准輸出(stdout)重定向方式


系統:windows為主

python 版本:2.7

1. 背景

  在Python中,文件對象sys.stdinsys.stdoutsys.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 $SHELLecho $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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM