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


參考文檔

Python重定向標准輸入、標准輸出和標准錯誤

http://blog.csdn.net/lanbing510/article/details/8487997

python重定向sys.stdin、sys.stdout和sys.stderr

http://www.cnblogs.com/guyuyuan/p/6885448.html

 

 

1.print

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

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

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.定義

'''

標准輸出和標准錯誤(通常縮寫為 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打印信息到網頁
 

  

聊干凈了,結束~

 


免責聲明!

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



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