當咱們在Python的print
打印時,咱們到底在使用什麼? 其實print語句不過是Python簡便使用的特性體驗而已,其背後就是sys.stdout
對象的簡單接口,即咱們也能夠利用sys.stdout
完成全部print打印行爲,好比打印Hello, world!
。python
import sys
sys.stdout.write('Hello, world!')
複製代碼
示例結果:bash
Hello, world!
複製代碼
再者函數
import sys
s1 = 'Hello,'
s2 = 'world!'
print(s1, s2, end='\n')
sys.stdout.write(str(s1) + ' ' + str(s2) + '\n')
複製代碼
示例結果:spa
Hello, world!
Hello, world!
複製代碼
咱們已經知道print對sys.stdout的依賴,那麼咱們可否將sys.stdout賦值爲標準輸出流之外的東西,即將print的文字傳送到其餘地方。code
import sys
s1 = 'Hello,'
s2 = 'world!'
sys.stdout = open('hello.txt', 'a')
...
print(s1, s2)
print(s2, s1)
複製代碼
hello.text內容:對象
Hello, world!
world! Hello,
複製代碼
能夠看到標準輸出流並無打印任何信息,而須要被打印的內容所有被寫入hello.txt
文件中,這是爲什麼? 由於咱們把sys.stdout
重設成已經打開的文件對象,重設以後,程序中全部的print都會將文字輸出至文件hello.txt
中,即進程中只有一個sys模塊,經過這種方式就能夠將全部的print進行重定向。固然咱們也能夠對單個print進行重定向,即上節介紹的print函數中的file參數完成重定向,這也是爲什麼print定義file以後不會進行原始輸出流的操做,即屏幕沒有打印該次print函數的字符串信息。接口