2013-02-22 17 views
6

Chcę użyć Pythona do wysyłania danych wyjściowych do pliku log.txt i STDOUT na terminalu. Oto, co mam:Python, jak wysłać dane wyjściowe do pliku i terminala

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 

Ten program wysyła dane wyjściowe do pliku i standardowego wyjścia. Moje pytanie brzmi: w jaki sposób wywołano funkcję zapisu do pliku?

Odpowiedz

3

Z documentation dla sys.stdout:

stdout i stderr nie musi być wbudowany w obiektach plików: każdy obiekt jest dopuszczalne, o ile ma ona metody write(), która pobiera ciąg argumentu .

+0

dzięki człowieku, rozumiem to teraz – user192082107

2

Dokładniej, funkcja druku (w Python 2.X wciąż jest kluczowe, ale to nie ma znaczenia tutaj) robi coś takiego

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

tak, że kiedy cię nazwij go, to wydrukuje twoją wiadomość na sys.stdout. Jeśli jednak nadpisujesz sys.stdout obiektem zawierającym metodę .write, cóż, wywoła tę metodę. To jest magia duck-typing.

Powiązane problemy