Fehlercodes von Python-Prozessen außerhalb von ihnen in Linux abfangen?

371
Pythoneer

Ich verwende einen Python-Code, nicht meinen, der tagelang oder sogar wochenlang läuft. Möglicherweise sind noch einige Fehler vorhanden, so dass es gelegentlich abstürzt. Aber ich möchte es nicht alle paar Stunden überprüfen. Ich weiß, dass der Python-Prozess (es) Codes zurückgibt! = 0, wenn etwas passiert.

Aber ist es möglich, das außerhalb der Prozesse zu erfassen? Wenn ja, würde ich das gerne tun, damit ich mir eine Email schicken kann, falls etwas passiert.

Vielen Dank.

0

1 Antwort auf die Frage

0
AFH

Alles, was Sie brauchen, ist den Rückgabewert zu überprüfen.

if PythonScript then # Actions on success ... else # Actions on failure err=$? ... fi 

Beachten Sie, dass der Rückkehrcode $?von jedem Befehl, der ausgeführt wird, überschrieben wird. Wenn der Wert für die Protokollierung oder für andere Zwecke benötigt wird, müssen Sie ihn speichern, bevor ein nachfolgender Befehl ihn ändert.

Wenn das PythonScriptProgramm ausführbar ist und über die erste Zeile #!/usr/bin/python(oder den Pfad zur zu verwendenden Python-Version) verfügt, kann es direkt aufgerufen werden. Andernfalls sollte pythonoder die entsprechende Version vorangestellt werden .

Könnten Sie das bitte näher ausführen? Wenn ich a.py betreibe, was ewig dauert, starte ich dann b.py, das überprüfen kann, ob a.py Fehlermeldungen zurückgibt? Weil ich nicht in a.py herumspielen will Pythoneer vor 6 Jahren 0
Ihre Frage und Ihr Kommentar sind unklar. Wie gibst du einen Fehler an `b.py`? In einem Laufparameter? in einer Umgebungsvariablen? in einer Datei? Ich kann meine Antwort nicht weiter ausarbeiten, bis Sie Ihre Frage erarbeitet haben. Wenn Sie immer "b.py" ausführen, ist das "if" in meiner Antwort unnötig: Es könnte so einfach wie "a.py" sein; b.py $? `, wobei" b.py "der Beendigungscode von" a.py "in seinem ersten Parameter übergeben wird. AFH vor 6 Jahren 0
Nein, das ist der Punkt. Ich starte den Bildschirm, starte python a.py und lasse ihn dann laufen. Das ist alles was ich mache. Wenn a.py abstürzt, wird es auf dem Bildschirm angezeigt, weil es Sachen wie zurückgegebenes 1 drucken wird ... und ich möchte das irgendwie fangen ... Pythoneer vor 6 Jahren 0
Ich nahm an, dass "a.py" "sys.exit ()" aufruft, um den Abschlussstatus zurückzugeben. Wenn dies nicht der Fall ist, haben Sie große Schwierigkeiten, Strings aus einem Fenster zu lesen: Obwohl Sie a.py nicht ändern möchten, ist dies wahrscheinlich die einfachste Antwort. AFH vor 6 Jahren 0