2013-02-22 21 views
6

Python'u, hem bir dosyaya log.txt hem de terminalde STDOUT'a çıktı göndermek istiyorum. İşte sahip olduğum şey şu: Python, hem dosya hem de terminal için çıkış nasıl gönderilir

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 
Bu program, çıktıyı dosyaya ve stdout'a gönderir. Sorum şu: Dosyaya yazma işlevi nasıl çağrıldı? sys.stdout için documentation itibaren

cevap

3

:

stdout ve stderr yerleşik gerekmemektedir dosya nesneleri: Herhangi bir nesne sürece bir dize argüman alır yazma() yöntemini sahip olduğu kabul edilebilir .

+0

Teşekkürler, şimdi anladım – user192082107

2
Daha spesifik

, baskı fonksiyonu (hala bir anahtar kelimedir Python 2.x içinde, ama bu mesele burada değil) bu nedenle bu

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

ki sizi böyle bir şey yapar Sys.stdout üzerindeki mesajınızı yazdıracağız. Ancak, sys.stdout öğesinin üzerine bir .write yöntemi içeren bir nesne ile yazıyorsanız, bu yöntemi çağırır. Bu, duck-typing'un büyüsüdür.

İlgili konular