Asugabe von Python Programm in Datei umleiten

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
samy-delux
User
Beiträge: 44
Registriert: Donnerstag 26. April 2007, 19:23

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
rico
User
Beiträge: 10
Registriert: Samstag 4. November 2006, 13:21
Kontaktdaten:

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.
samy-delux
User
Beiträge: 44
Registriert: Donnerstag 26. April 2007, 19:23

Sehr gut, genau das wollte ich ;)
Danke!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Geht übrigens auch mit einem einfachen ``&>`` siehe Bash Programming Howto.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
samy-delux
User
Beiträge: 44
Registriert: Donnerstag 26. April 2007, 19:23

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?
Benutzeravatar
Trundle
User
Beiträge: 591
Registriert: Dienstag 3. Juli 2007, 16:45

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.
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

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 :)
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

meneliel, kennst du schon das logging-Modul? [wiki]Neue Features#Logging[/wiki]
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

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