Seite 1 von 1
Logging von stdout und stdin
Verfasst: Dienstag 7. Juni 2005, 19:57
von etienne77
Hallo,
ist es möglich den stdout und stdin sowohl am promt als auch gleichzeitg in eine Datei wegzuschreiben?
Falls in Python nicht geht: Besteht da eine Möglichkeit über die Windows cmd am prompt ein bzw ausgaben zumachen und gleichzeitg die Ein und Ausgaben in ein File zu loggen.
Ciao
Stefan
Verfasst: Dienstag 7. Juni 2005, 21:17
von jens
Das geht in Python selber...
Man modifiert einfach sys.stdout...
Ungefähr so:
Code: Alles auswählen
import sys
class Redirectstdout:
def __init__(self):
self.Meinstdout = sys.stdout
self.outfile = file( "ausgaben.txt" )
def write(self,*text):
text=" ".join([str(i) for i in text])
self.outfile.write( text )
self.Meinsys.stdout.write(text)
def close( self ):
self.outfile.close()
sys.stdout = Redirectstdout()
Verfasst: Dienstag 7. Juni 2005, 21:34
von CM
Hallo Stefan,
So als Ergänzung zu Jens Vorschlag: Dookies
Linebuffermodul ist wahrscheinlich der Overkill für Deine Anwendung. Aber ich habe es lieben gelernt. Und vielleicht findest Du da auch noch die eine oder andere Anwendung.
Gruß,
Christian
Verfasst: Sonntag 12. Juni 2005, 18:27
von Gast
Hallo,
danke für die Hilfe.
@jens
deni Skript produziert bei mir ein IO Error:
Code: Alles auswählen
File "E:\temp\Redirectstdout.py", line 10, in write
self.outfile.write( text )
IOError: (0, 'Error')
Die Datei zum Logging ist vorhanden! Steckt in deinem Skript noch ein Fehler?
Ciao
Stefan
Verfasst: Sonntag 12. Juni 2005, 19:52
von jens
Die Datei muß explizit zum schreiben geöffnet werden, denke ich...
Also so:
Code: Alles auswählen
import sys
class Redirectstdout:
def __init__(self):
self.Meinstdout = sys.stdout
self.outfile = file( "ausgaben.txt", "w" ) # oder "a" für append/anhängen!
def write(self,*text):
text=" ".join([str(i) for i in text])
self.outfile.write( text )
self.Meinsys.stdout.write(text)
def close( self ):
self.outfile.close()
sys.stdout = Redirectstdout()
Verfasst: Dienstag 14. Juni 2005, 17:44
von etienne77
Hallo Jens,
du hast noch ein kleinen verschreiber drin:
so tuts
Code: Alles auswählen
import sys
class Redirectstdout:
def __init__(self):
self.Meinstdout = sys.stdout
self.outfile = file( r"e:\temp\ausgabe1.txt","a" )
def write(self,*text):
text=" ".join([str(i) for i in text])
self.outfile.write( text )
self.Meinstdout.write(text)
def close( self ):
self.outfile.close()
Danke nochmals
Ciao
Stefan
Verfasst: Dienstag 14. Juni 2005, 18:04
von jens
etienne77 hat geschrieben:du hast noch ein kleinen verschreiber drin:
war auch ungetestet
etienne77 hat geschrieben:self.outfile = file( r"e:\temp\ausgabe1.txt","a" )
Das ist aber unschön! mit r markiert man eigentlich eine regular expression
Du könntest entweder "e:\\temp\\ausgabe1.txt" schreiben, oder einfach Linux-like: "e:/temp/ausgabe1.txt", was auch unter Windows funktioniert
Verfasst: Dienstag 14. Juni 2005, 18:49
von Leonidas
jens hat geschrieben:Das ist aber unschön! mit r markiert man eigentlich eine regular expression
Nein, das ist meines Erachtens ganz in Ordnung, r"" sind ja raw-Strings, nicht Regex-Strings, somit kann man die Auch nutzen um Pfade zu speichern (okay, mit os.path arbeiten wäre vermutlich sauberer).