Seite 1 von 1

Asugabe von Python Programm in Datei umleiten

Verfasst: Samstag 22. September 2007, 13:57
von samy-delux
Hey Leute,

Ich habe ein Script geschrieben, was noch nicht ganz zuverlässig funktioniert. Das Problem ist, dass ich den Fehler nicht finden kann, da das Skript immer erst nach ca. 1h abstürtzt und ich es leider nur auf meine Root Server ausführen kann. Doch schon nach kurzer Zeit, wenn ich das Skript auf dem Server ausführe, erhalte ich keinen Output mehr!
Deshalb sehe ich auch die Fehlermeldung nicht!

Als Lösung dachte ich mit einfach "script.py > output" auszugühren, aber dort landet dann leider nur der normale output, ohne die Fehlermeldung.
Wie kann ich alles in eine Datei umleiten?

so long,
Samy

Verfasst: Samstag 22. September 2007, 14:09
von rico
was du suchst ist wahrscheinlich:

"script.py 1> standard_output.txt 2> error_output.txt"

oder

"script.py 2>&1 1> output.txt"

dabei wird der Error-Output auf den normalen umgebogen und somit gehts dann auch mit einer Datei.

Verfasst: Samstag 22. September 2007, 14:24
von samy-delux
Sehr gut, genau das wollte ich ;)
Danke!

Verfasst: Samstag 22. September 2007, 15:32
von Leonidas
Geht übrigens auch mit einem einfachen ``&>`` siehe Bash Programming Howto.

Verfasst: Sonntag 23. September 2007, 15:25
von samy-delux
Hmm, also so ganz funktioniert es doch noch nicht.
Ich starte mein Programm wie folgt:

Code: Alles auswählen

script.py &> space &
Und obwohl es wenn man es normal startet, direkt etwas ausgibt, bleibt die Datei space einfach leer!
Woran liegt das?

Verfasst: Montag 24. September 2007, 12:46
von Trundle
samy-delux hat geschrieben:Und obwohl es wenn man es normal startet, direkt etwas ausgibt, bleibt die Datei space einfach leer!
Woran liegt das?
Das könnte passieren, wenn stdout gepuffert wird.

Verfasst: Dienstag 25. September 2007, 08:55
von meneliel
Hatte das Problem letztens auch, dass ich mit Scriptabbrüchen zu tun hatte, die ich nicht immer zurodnen konnte und das Script oft über mehrere Tage lief.

Gelöst hab ich es folgender Maßen:

eine "Log" Datei erstellt, in der mit Zeitstempel alle ungewöhnlichen Sachen rein geschrieben werden:

in meiner Hauptscriptdatei:

Code: Alles auswählen

log = open(LOGTXT, "a")
In ner anderen Py-Datei, wo viele kleine Behelfsfunktionen drin stehen:

Code: Alles auswählen

def LOG(log, message):
	x = time.ctime(time.time())
	log.write(x)
	log.write(":")
	log.write(message)
	log.write("\n")
	log.flush
Und dann im Hauptscript eine Exception:

Code: Alles auswählen

except:
	tb = sys.exc_info()[2]				
	tbinfo = traceback.format_tb(tb)[0] 
	pymsg = "PYTHON ERRORS:\nTraceback Info:\n" + tbinfo + "\nError Info:\n    " + str(sys.exc_type)+ ": " + str(sys.exc_value) + "\n"
	msgs = "GP ERRORS:\n" + gp.GetMessages(2) + "\n"
	helper.log(log, pymsg+ "\n"+msgs+"\n")
	...
Ist vielleicht ein wenig Umständlich, aber funktioniert :)
Den ganzen das msgs müsstest/könntest du weglassen in deinem Fall.


EDIT: falls daran irgendwas auszusetzen ist, BITTE kritisiert :)

Verfasst: Dienstag 25. September 2007, 09:00
von Rebecca
meneliel, kennst du schon das logging-Modul? [wiki]Neue Features#Logging[/wiki]

Verfasst: Dienstag 25. September 2007, 13:51
von mkesper
meneliel hat geschrieben:

Code: Alles auswählen

log = open(LOGTXT, "a")
Ich würde die Logdatei (die ich natürlich mit dem logging-Modul fülle ;) ) ungepuffert öffnen:

Code: Alles auswählen

log = open(LOGTXT, "a", 0)