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.