【python】print · sys.stdout · sys.stderr

參考文檔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

 

 

1.print

print obj 事實上是調用了sys.stdout.write(obj+'\n'),注意多了一個換行符調試

1a. print在python 2.X 和 python 3 上的區別htm

python 3  的print 函數應該是多了兩個選項參數: end, file對象

  • end能夠控制print結尾是換行、不換行、或是其餘字符
#不換行
print("xx",end='')
  • file能夠控制輸出爲sys.stdout 仍是sys.stderr
print("XXX",sys.stderr)

 

 

2.sys.stdout和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是有緩衝區的,解決緩衝有兩種方式:

  • print() 或者sys.stdout.write()後加sys.stdout.flush()
  • 執行python腳本時增長-u 參數,即 python -u XXX.py

 

 

3. 特殊狀況CGI 以及 重定向輸出

經過以上可知原始的 stdout 和 stderr都是指向控制檯

3a.CGI 的stdout

若是使用python 編寫CGI腳本,此時stdout是指向輸出的網頁的,stderr依然指向控制檯

因此直接使用print XXX,XXX是直接生成到頁面中的;若是要調試打log,有兩種方法:

  • 經過stderr來輸出;
  • 臨時修改stdout,使其指向控制檯,即重定向輸出

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打印信息到網頁
 

  

聊乾淨了,結束~

相關文章
相關標籤/搜索