參考文檔html
Python重定向標準輸入、標準輸出和標準錯誤python
http://blog.csdn.net/lanbing510/article/details/8487997web
python重定向sys.stdin、sys.stdout和sys.stderr函數
http://www.cnblogs.com/guyuyuan/p/6885448.html.net
print obj 事實上是調用了sys.stdout.write(obj+'\n'),注意多了一個換行符調試
1a. print在python 2.X 和 python 3 上的區別htm
python 3 的print 函數應該是多了兩個選項參數: end, file對象
#不換行 print("xx",end='')
print("XXX",sys.stderr)
2a.定義blog
'''ip
標準輸出和標準錯誤(一般縮寫爲 stdout 和 stderr)是創建在每一個UNIX系統內的管道(pipe)。
當你 print 某東西時,結果輸出到 stdout 管道中;當你的程序崩潰並打印出調試信息時(象Python中的錯誤跟蹤),結果輸出到 stderr 管道中。
一般這兩個管道只與你正在工做的終端窗口相聯,因此當一個程序打印輸出時,你能夠看到輸出,而且當一個程序崩潰時,你能夠看到調試信息。(若是你在一個基於窗口的Python IDE系統上工做,stdout 和 stderr 缺省爲「交互窗口」。)
'''
2b.使用
'''
stdout 和 stderr 都是類文件對象,就象咱們在提取輸入源中所討論的同樣,但它們都是隻寫的。它們沒有 read 方法,只有 write。
然而,它們的確是類文件對象,而且你能夠將任意文件對象或類文件對象賦給它們來重定向輸出。
'''
2c.緩衝
sys.stdout是有緩衝區的,解決緩衝有兩種方式:
經過以上可知原始的 stdout 和 stderr都是指向控制檯
3a.CGI 的stdout
若是使用python 編寫CGI腳本,此時stdout是指向輸出的網頁的,stderr依然指向控制檯
因此直接使用print XXX,XXX是直接生成到頁面中的;若是要調試打log,有兩種方法:
3b.重定向輸出
f_handler=open('out.log', 'w') sys.stdout=f_handler print 'hello'
#!/usr/bin/env python import cgi # 在CGI腳本下,sys.stdout輸出到網頁 web_out = sys.stdout # 保存下輸出到網頁的狀態 sys.stdout = sys.stderr # 將標準輸出改爲控制檯 sys.stdout.write('sys.stdout -> console') # 經過sys.stdout打印信息到控制檯 print("print -> console") # 經過print打印信息到控制檯 sys.stdout = web_out # 將標準輸出改爲網頁 sys.stdout.write('sys.stdout -> web') # 經過sys.stdout打印信息到網頁 print("print -> web") # 經過print打印信息到網頁
聊乾淨了,結束~