1. 程式人生 > >python print 和 sys.stdout.write()

python print 和 sys.stdout.write()

python: v-3.6.3

當我們使用print(obj)在console上列印物件的時候,實質上呼叫的是sys.stdout.write(obj+'\n'),print在列印時會自動加個換行符,以下兩行等價:

 
  1. sys.stdout.write('hello'+'\n')
    
    print 'hello'

     

從控制檯重定向到檔案

原始的 sys.stdout 指向控制檯,如果把檔案的物件的引用賦給 sys.stdout,那麼 print 呼叫的就是檔案物件的 write 方法,將物件寫入檔案中:

 
  1. f_handler=open('out.log', 'w')
    
    sys.stdout=f_handler
    
    print('hello')

    如果你還想在控制檯列印一些東西的話,最好先將原始的控制檯物件引用儲存下來,向檔案中列印之後再恢復 sys.stdout

同時重定向到控制檯和檔案

如果我們希望列印的內容一方面輸出到控制檯,另一方面輸出到檔案作為日誌儲存,那麼該怎麼辦?將列印的內容保留在記憶體中,而不是一列印就將 buffer 釋放重新整理,我們可以通過自定義一個類來實現這個功能: