Seite 1 von 1

Verständnisfrage zu einem Beispiel

Verfasst: Donnerstag 14. Februar 2013, 15:09
von PeterPan2013
Hallo zusammen,

ich habe im Netz ein schönes Beispiel zum Logging der stdout/stderr Streams gefunden, welches genau das macht was ich brauche.

Code: Alles auswählen

sys.stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)

tee = subprocess.Popen(["tee", "log.txt"], stdin = subprocess.PIPE)
os.dup2(tee.stdin.fileno(), sys.stdout.fileno())
os.dup2(tee.stdin.fileno(), sys.stderr.fileno())
Da ich noch ziemlich frisch in Python bin und das Beispiel nicht kommentiert wurde, möchte ich es verstehen und nicht einfach SO übernehmen. :K

Die Klasse "subprocess"(http://docs.python.org/2/library/subpro ... ommunicate) habe ich mir angesehen.

Kann mir das jemand kurz erklären? Mr. Google konnte mir leider auch nicht helfen.


Vielen Dank
Gruß

Re: Verständnisfrage zu einem Beispiel

Verfasst: Donnerstag 14. Februar 2013, 17:35
von sparrow
Du zäumst das Pferd von der falschen Seite auf.
Subprocess führt externe Prozesse aus, ruft also externe Programme auf. In diesem Fall das Programm tee, mit dem sich die Ausgabe eines Programms auf zwei Streams aufteilen lässt.

Ich bin mir ziemlich sicher, dass sich das auch mit Python Bordmitteln umsetzen lässt. Was genau hast du denn überhaupt vor?

Re: Verständnisfrage zu einem Beispiel

Verfasst: Freitag 15. Februar 2013, 09:51
von PeterPan2013
Hallo sparrow,

erstmal danke für deine Rückmeldung.
Was genau hast du denn überhaupt vor?
Ich möchte alle Informationen von STDOUT und SDTERR in eine Datei umleiten.

Hast du eine Idee?


Gruß

Re: Verständnisfrage zu einem Beispiel

Verfasst: Freitag 15. Februar 2013, 10:08
von cofi

Code: Alles auswählen

import sys
sys.stdout = sys.stderr = open('log.txt', 'w')
Mehr braucht es dazu dann doch nicht. Wenn deine Anforderungen mehr werden, kannst du die beiden auch durch ein Klassenexemplar ersetzen, dass sich file-like verhaelt, z.b. um nur bestimmte sachen zu loggen.