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.
Antwort
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.
Ich würde vorschlagen, PowerShell anstelle von Batch zu verwenden; Batch sieht für mich schrecklich aus. – GingerPlusPlus
Sicher, PowerShell dann. Alles mit einer Schleife reicht. – alexis
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
- 1. Überprüfen, ob ein Programm ausgeführt wird
- 2. Überprüfen Sie, ob ein Windows-Dienst ausgeführt wird?
- 3. Überprüfen Sie, ob ein MotionEvent.ACTION_MOVE ausgeführt wurde
- 4. Überprüfen, ob der CSS3-Übergang ausgeführt wird
- 5. Überprüfen Sie, ob ein Prozess mit Shell-Skript ausgeführt wird
- 6. Überprüfen Sie, ob der Prozess als eine Pipe ausgeführt wird
- 7. Überprüfen Sie, ob eine bestimmte EXE-Datei ausgeführt wird
- 8. Überprüfen Sie, ob der Dienst unter Android ausgeführt wird.
- 9. Überprüfen Sie, ob Methode zum ersten Mal ausgeführt wird. C#
- 10. Wie kann ich überprüfen, ob ein Windows-Dienst ausgeführt wird
- 11. Überprüfen Sie, ob die Anwendung ausgeführt wird - InstallJammer
- 12. Überprüfen, ob eine Anwendung mit Windows-Dienst ausgeführt wird
- 13. Ermitteln Sie, ob ein Programm auf einem Remotedesktop ausgeführt wird
- 14. Ermitteln Sie, ob ein Ruby-Skript bereits ausgeführt wird
- 15. Überprüfen, ob Code in Interface Builder ausgeführt wird
- 16. for-Schleife wird nicht ordnungsgemäß ausgeführt?
- 17. So ermitteln Sie, ob eine Webanwendung gerade ausgeführt wird
- 18. Ermitteln Sie dynamisch, ob Azure ausgeführt wird oder nicht?
- 19. So ermitteln Sie, ob Git merge ausgeführt wird
- 20. erkennen, ob ein ASCX/ASPX in SharePoint ausgeführt wird?
- 21. Ermitteln, ob ein Prozess in lxc/Docker ausgeführt wird
- 22. Auch wenn onCreateView erneut ausgeführt wird, wird View nach BACK press nicht ordnungsgemäß wieder zusammengesetzt?
- 23. Ermitteln, ob ein Programm im Debug-Modus ausgeführt wird
- 24. erkennen, ob ein Programm über die Eingabeaufforderung ausgeführt wird
- 25. Verwenden Sie GetProcessesByName die beste Möglichkeit, um zu überprüfen, ob ein Prozess ausgeführt wird?
- 26. Programmgesteuert bestimmen, ob ein Skript normal veröffentlicht oder ausgeführt wird
- 27. So ermitteln Sie, ob Eclipse im Debug-Modus ausgeführt wird
- 28. C/C++ Ermitteln, ob ein Programm ausgeführt wird
- 29. So verfolgen Sie, ob eine asynchrone/wartbare Aufgabe ausgeführt wird
- 30. Überprüfen Sie, ob ein Win32-Thread ausgeführt wird oder sich in einem angehaltenen Zustand befindet
Und wo ist die Skriptinhalte? Bitte lesen Sie [So erstellen Sie ein minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve) –
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
Der Inhalt ist irrelevant, ich frage nach einer Möglichkeit zu überprüfen, ob ein Skript gestoppt wurde, egal was der Fehler ist –