2013-02-22 79 views
6

我想用Python將輸出發送到終端上的文件log.txt和STDOUT。這是我有:Python,如何將輸出發送到文件和終端

import sys 
class Logger(object): 
    def __init__(self, filename="Default.log"): 
     self.terminal = sys.stdout 
     self.log = open(filename, "a") 

    def write(self, message): 
     self.terminal.write(message) 
     self.log.write(message) 

sys.stdout = Logger("log.txt") 
print "Hello world !"   #This line is saved in log.txt and STDOUT 

該程序發送輸出到文件和標準輸出。我的問題是:如何調用文件的寫入功能?

回答

3

documentation爲sys.stdout的:

輸出和錯誤不需要內置的文件對象:任何對象是可接受的,只要它有一個寫()方法,它接受字符串參數。

+0

謝謝你,現在我明白了 – user192082107 2013-02-22 09:12:55

2

更具體地說,打印功能(在Python 2.X它仍然是一個關鍵字,但此處無關緊要)做這樣的事情

import sys 
def print(message): 
    sys.stdout.write(message) 

,這樣,當你稱它會在sys.stdout上打印你的消息。但是,如果用包含.write方法的對象覆蓋sys.stdout,那麼它將調用該方法。 這就是duck-typing的魔力。