前言
stdin,stdout ,以及stderr變量,包含與標准I/O流對應的流對象。
sys.stdin ---- 標准輸入函數,類似於input()/raw_input()
sys.stdput ----標准輸出函數,類似於print()
sys.stderr ----標准錯誤輸出函數
實際上,input()和print()都是通過調用標准流實現,sys.stdin和sys.stdout實質上不過是兩個interface接口,用於切換不同i/o。
sys.stdin vs input()/raw_input()【標准輸入】
sys.stdin.readline() 用於讀取一行文本輸入,直到按回車。
【注意】①該方式會將換行符打印出來;②此方式無法在輸入時為輸入內容定義前綴。
sys.stdin.readlines() 用於讀取多行文本輸入,按下回車 后,無法退出輸入。
【注意】①Pycharm中按CTRL+D退出輸入模式;②輸入數據類型為列表
input()/raw_input() 用於讀取一行文本輸入;回車符結束輸入,但是回車符不會被包含在輸入內。
舉例:
# -*- encoding:utf-8 -*- import sys from pip._vendor.distlib.compat import raw_input a = raw_input('raw_input()方式,請輸入:') b = input('input()方式,請輸入:') print('aw_input()方式,輸入數據:{},數據類型:{}'.format(a, type(a)), 'input()方式,輸入數據:{},數據類型:{}'.format(b, type(b)), sep='\n') c = sys.stdin.readline() # ①該方式會將換行符打印出來;②此方式無法在輸入時為輸入內容定義前綴 print('sys.stdin.readline()方式,輸入數據:{},數據類型:{}'.format(c, type(c))) d = sys.stdin.readlines() print('sys.stdin.readlines()方式,輸入數據:{},數據類型:{}'.format(d, type(d)))
運行結果:
sys.stdout vs print()【標准輸出】
print:python在調用print的過程中,實際上是引用了 sys.stdout.write(obj+’/n’) ,即 print()結束時默認換行,若想實現不自動換行,可使用 print(param,end=‘’) ;
sys.stdout.write() 方法把字符寫入到標准輸出中,也就是控制台。該方法默認不換行,若想實現換行,可使用 sys.stdout.write(‘str/n’)
區別: print() 幾乎可以打印所有類型的數據,但是 sys.stdout.write() 只接受字符型數據
例如:
import sys print('Hello World!') # 該語句會在標准輸出的屏幕上打印 Hello World! # 等價於: sys.stdout.write('Hello World!\n')
sys.stdout和sys.stderr
1、標准輸出和標准錯誤(通常縮寫為 stdout 和 stderr)是建立在每個UNIX系統內的管道(pipe)。
當你 print 某東西時,結果輸出到 stdout 管道中;當你的程序崩潰並打印出調試信息時(象Python中的錯誤跟蹤),結果輸出到 stderr 管道中。
2、通常這兩個管道只與你正在工作的終端窗口相聯,所以當一個程序打印輸出時,你可以看到輸出,並且當一個程序崩潰時,你可以看到調試信息。(如果你在一個基於窗口的Python IDE系統上工作,stdout 和 stderr 缺省為“交互窗口”。)
3、stdout 和 stderr 都是類文件對象,就象我們在提取輸入源中所討論的一樣,但它們都是只寫的。它們沒有 read 方法,只有 write。
然而,它們的確是類文件對象,並且你可以將任意文件對象或類文件對象賦給它們來重定向輸出。
4、sys.stdout是有緩沖區的,解決緩沖有兩種方式:
- print()或者 sys.stdout.write() 后加 sys.stdout.flush()
- 執行python腳本時增加-u參數,即 python -u XXX.py