Logging von stdout und stdin

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
etienne77
User
Beiträge: 15
Registriert: Freitag 4. März 2005, 18:38
Wohnort: Baden-Württemberg

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
Benutzeravatar
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:

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()

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

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
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
Benutzeravatar
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:

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()

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
etienne77
User
Beiträge: 15
Registriert: Freitag 4. März 2005, 18:38
Wohnort: Baden-Württemberg

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

etienne77 hat geschrieben:du hast noch ein kleinen verschreiber drin:
:oops: 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 ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten