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.
etienne77
User
Beiträge: 15
Registriert: Freitag 4. März 2005, 18:38
Wohnort: Baden-Württemberg

Logging von stdout und stdin

Beitragvon etienne77 » 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: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » 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:

Beitragvon CM » 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

Beitragvon 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: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » 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

Beitragvon etienne77 » 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: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » 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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » 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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder