Für ein kleines Python-Skript habe ich nach einer einfachen Möglichkeit gesucht Statusmeldungen sowohl in eine Datei als auch auf die Konsole auszugeben.

Hier bin ich auf eine nette Lösung gestoßen, die ich noch mit einem Parameter versehen habe, falls nur eine Ausgabe in eine Logdatei gewünscht ist:

class Logger( object ):
    def __init__( self, name, silent ):
        self.silent = silent
        if not self.silent:
            self.terminal = sys.stdout
        self.log = open( name, "a" )

    def __del__( self ):
        if not self.silent:
            sys.stdout = self.terminal
        self.log.close()

    def write( self, message ):
        if not self.silent:
            self.terminal.write( message )
        self.log.write( message )

Zusammen mit einer Funktion für einen Zeitstempel im Dateinamen

def TimeStamp():
    stamp=time.strftime( "%Y-%m-%d_%H.%M.%S", time.localtime() )
    return( stamp )

kann man dann die Ausgabe von print mit der Zeile

sys.stdout = Logger( "logfile_%s.log" % TimeStamp(), False )

umleiten. Bei der Uhrzeit im Zeitstempel habe ich Punkte statt der üblichen Doppelpunkte verwendet, da ich die Doppelpunkte in Dateinamen vermeiden wollte.