標準輸入、標準輸出和錯誤輸出。python
標準輸入:通常是鍵盤。stdin對象爲解釋器提供輸入字符流,通常使用raw_input()和input()函數。函數
例如:讓用戶輸入信息(Python環境爲2.x):this
1 #!/usr/bin/python 2 # -*- coding: utf-8 -*- 3 import sys 4 name = raw_input("Please input your name: ") 5 print name 6 7 # python test.py 8 Please input your name: xiaoming 9 xiaoming
1 import sys 2 print "Please enter your name: " 3 name = sys.stdin.readline() 4 print name 5 6 # python b.py 7 Please enter your name: 8 xiaoming 9 xiaoming
再例如,a.py文件標準輸出做爲b.py文件標準輸入:spa
1 # cat a.py 2 import sys 3 sys.stdout.write("123456\n") 4 sys.stdout.flush() 5 # cat b.py 6 import sys 7 print sys.stdin.readlines() 8 9 # python a.py | python b.py 10 ['123456\n']
sys.stdout.write()方法其實就是下面所講的標準輸出,print語句就是調用了這個方法。.net
標準輸出:通常是屏幕。stdout對象接收到print語句產生的輸出。code
例如:打印一個字符串:對象
1 #!/usr/bin/python 2 # -*- coding: utf-8 -*- 3 import sys 4 print "Hello world!" 5 6 # python test.py 7 Hello world!
sys.stdout是有緩衝區的,好比:blog
1 import sys 2 import time 3 for i in range(5): 4 print i, 5 # sys.stdout.flush() 6 time.sleep(1) 7 # python test.py 8 0 1 2 3 4
本是每隔一秒輸出一個數字,但如今是循環完纔會打印全部結果。若是把sys.stdout.flush()去掉,就會沒執行到print就會刷新stdout輸出,這對實時輸出信息的程序有幫助。utf-8
錯誤輸出:通常是錯誤信息。stderr對象接收出錯的信息。字符串
例如:引起一個異常
1 >>> raise Exception, "raise..." 2 Traceback (most recent call last):File "<stdin>", line 1, in <module> 3 Exception: raise...
總結:
sys.stdout與print
當咱們在 Python 中打印對象調用 print obj 時候,事實上是調用了 sys.stdout.write(obj+'\n') ;print 將你須要的內容打印到了控制檯,而後追加了一個換行符;print 會調用 sys.stdout 的 write 方法
如下兩行在事實上等價:
1 sys.stdout.write('hello'+'\n') 2 3 print 'hello'
sys.stdin與raw_input:
當咱們用 raw_input('Input promption: ') 時,事實上是先把提示信息輸出,而後捕獲輸入
如下兩組在事實上等價:
1 hi=raw_input('hello? ') 2 3 print 'hello? ', #comma to stay in the same line 4 5 hi=sys.stdin.readline()[:-1] # -1 to discard the '\n' in input stream
從控制檯重定向到文件
原始的 sys.stdout 指向控制檯
若是把文件的對象的引用賦給 sys.stdout,那麼 print 調用的就是文件對象的 write 方法
1 f_handler=open('out.log', 'w') 2 3 sys.stdout=f_handler 4 5 print 'hello' 6 7 # this hello can't be viewed on concole 8 9 # this hello is in file out.log
記住,若是你還想在控制檯打印一些東西的話,最好先將原始的控制檯對象引用保存下來,向文件中打印以後再恢復 sys.stdout:
1 __console__=sys.stdout 2 3 # redirection start # 4 5 ... 6 7 # redirection end 8 9 sys.stdout=__console__