2016-07-23 16 views
-1

Ich habe ein Skript, das wirklich fehlerhaft ist und alle paar Stunden aufgrund eines Fehlers stoppt. Ich programmiere nicht in Python, aber ich kenne die Grundlagen, also würde ich gerne wissen, wie ich ein Skript erstellen kann, das ein anderes Skript auf Fehler überprüft und wenn es wahr ist, führe es einfach erneut aus. Entschuldigung dafür, dass ich keine Beispiele gebe, aber ich denke, dass Sie die Idee haben und weil ich nicht gut darin bin, das zu tun, ist es einfacher, als zu versuchen, das Skript zu verstehen und es zu bearbeiten. Jede Hilfe wird sehr geschätzt.Überprüfen Sie, ob ein Python-Skript ordnungsgemäß ausgeführt wird und ob es nicht erneut ausgeführt wird.

+1

Und wo ist die Skriptinhalte? Bitte lesen Sie [So erstellen Sie ein minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) –

+1

Das sind Tools wie [supervisord] (http://supervisord.org/) und ähnliche zum. Nun, nicht wirklich, das Skript sollte repariert werden, aber ein Prozess-Controller kann zumindest die Überwachung und den Neustart durchführen. – dhke

+0

Der Inhalt ist irrelevant, ich frage nach einer Möglichkeit zu überprüfen, ob ein Skript gestoppt wurde, egal was der Fehler ist –

Antwort

2

Bei weitem der einfachste Weg ist es zu warten, bis es beendet wird und es immer neu startet, wenn es abstürzt; die folgende bash Schleife wird nichts tun, während das Programm ausgeführt wird, und es wird neu gestartet, sobald es beendet:

while true 
do 
    python buggy_script.py arguments 
    echo oops, restarting... 
done 

Und das ist es. Es läuft für immer, bis Sie das Bash-Skript beenden, das es ausführt.

PS. Dies setzt natürlich voraus, dass Sie OS X oder Linux verwenden. Verwenden Sie unter Windows ein entsprechendes Batch- oder PowerShell-Skript.

+0

Ich würde vorschlagen, PowerShell anstelle von Batch zu verwenden; Batch sieht für mich schrecklich aus. – GingerPlusPlus

+0

Sicher, PowerShell dann. Alles mit einer Schleife reicht. – alexis

0

Sie können einen Daemon für das Skript erstellen.

Im Wesentlichen behalten Sie die Hauptfunktion in einer Schleife, die für immer läuft. import logging import time if __name__ == '__main__': while True: //log errors logging.basicConfig(filename='log_file.log', level=logging.DEBUG) // use try except to handle exceptions try: // your code statements and function calls except Exception as e: // log the error for debugging logging.error(str(e)) // sleep the program if you want it to for desired amount of time. time.sleep(delay)

Die Ebene der Protokollierung, die ich festgelegt habe, ist debuggen. Sie können es auf jede andere Ihrer Wahl einstellen.

Referenzen:

Logging Docs - https://docs.python.org/3/library/logging.html

Umgang mit Ausnahmen - https://docs.python.org/3/tutorial/errors.html#handling-exceptions

Verwandte Themen