Erstellung eines Log-Files

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
Melody
User
Beiträge: 18
Registriert: Donnerstag 29. August 2013, 15:22

Hallo an euch alle,

ich habe mit dem print-Befehl verschiedene Ausgaben in Python ausgeben lassen.
Gibt es vielleicht eine Möglichkeit, nach dem Beenden des Programms die print-Ausgaben in einem Log-File zu speichern?

Vielen Dank bereits für eure Hilfe.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ja, das passende Python-Modul dazu heißt `logging` und sollte recht schnell in der Suchmaschine deiner Wahl als Treffer auftauchen.
BlackJack

@Melody: Man könnte sich eine Klasse schreiben die `sys.stdout` ersetzt und die Ausgaben zusätzlich in eine Datei schreibt. Wäre mir persönlich zu viel Magie. Entweder macht man so etwas explizit, oder nutzt die üblichen Werkzeuge die das für jedes Konsolenprogramm lösen. Also zum Beispiel ``tee`` unter Linux/Unix.
Melody
User
Beiträge: 18
Registriert: Donnerstag 29. August 2013, 15:22

Vielen Dank für die Antworten!
Melody
User
Beiträge: 18
Registriert: Donnerstag 29. August 2013, 15:22

Ich habe das Problem folgendermaßen gelöst:

Code: Alles auswählen

#Öffnen einer Datei mit dem Namen "Datei.txt" zum Schreiben
Datei=open(name="Datei.txt", mode='w')

#Ausgabe im Programm
print "Wort1"
print "Wort2"

#Umleitung der Ausgaben in die Datei "Datei.txt"
print >> Datei, "Wort1"
print >> Datei, "Wort2"

#Schließen der txt-Datei
Datei.close()
Der Inhalt der Datei würde dann folgendermaßen aussehen:
Wort1
Wort2

Alle Ausgaben habe ich also mit dem "print >> Datei,..." Befehl in die Datei geschrieben. Für mich war dies die leichteste Umsetzung.
BlackJack

@Melody: Alles doppelt ausgeben zu müssen halte ich ja nicht für eine „Lösung”. Das führt zu kopieren und einfügen mit leichten Änderungen, was letztendlich die Gefahr birgt, dass sich im Laufe der Programmentwicklung die beiden Varianten nicht mehr synchron bleiben wenn man Veränderungen vornimmt. Ausserdem verletzt es das DRY-Prinzip — Don't Repeat Yourself. Du hättest mindestens eine Funktion schreiben können die eine Zeichenkette sowohl ausgibt als auch in eine Datei schreibt. Oder halt `logging` verwenden, was genau für so etwas gedacht ist.
Melody
User
Beiträge: 18
Registriert: Donnerstag 29. August 2013, 15:22

Das mit der Funktion ist mir überhaupt nicht eingefallen. Ich habe einmal eine erstellt.. könnte man diese noch eleganter erstellen?

Code: Alles auswählen

Datei=open(name="Datei.txt", mode='w')

def func(x):
    print x
    print >> Datei, x

#Testwerte für die Funktion 
func("Hallo")
func(2)
func(55)

Datei.close()
Antworten