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
Logging von stdout und stdin
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Das geht in Python selber...
Man modifiert einfach sys.stdout...
Ungefähr so:
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()
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
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
Hallo,
danke für die Hilfe.
@jens
deni Skript produziert bei mir ein IO Error:
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
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Die Datei muß explizit zum schreiben geöffnet werden, denke ich...
Also so:
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()
Hallo Jens,
du hast noch ein kleinen verschreiber drin:
so tuts
Danke nochmals
Ciao
Stefan
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()
Ciao
Stefan
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
war auch ungetestetetienne77 hat geschrieben:du hast noch ein kleinen verschreiber drin:
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 funktioniertetienne77 hat geschrieben:self.outfile = file( r"e:\temp\ausgabe1.txt","a" )
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
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).jens hat geschrieben:Das ist aber unschön! mit r markiert man eigentlich eine regular expression
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice