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

Dienstag 7. Juni 2005, 19:57

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
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 7. Juni 2005, 21:17

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

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

Dienstag 7. Juni 2005, 21:34

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

Sonntag 12. Juni 2005, 18:27

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
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Sonntag 12. Juni 2005, 19:52

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

CMS in Python: http://www.pylucid.org
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

Dienstag 14. Juni 2005, 17:44

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
Moderator
Beiträge: 8482
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 14. Juni 2005, 18:04

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 14. Juni 2005, 18:49

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 Modvoice
Antworten