Verständnisfrage zu einem Beispiel

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
PeterPan2013
User
Beiträge: 6
Registriert: Mittwoch 6. Februar 2013, 15:38

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ß
Benutzeravatar
sparrow
User
Beiträge: 4165
Registriert: Freitag 17. April 2009, 10:28

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?
PeterPan2013
User
Beiträge: 6
Registriert: Mittwoch 6. Februar 2013, 15:38

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ß
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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