Subprocess kann die gezielte python-datei nicht erfolgreich neu starten

Ich schreibe ein Programm my_test.py , um Daten aus dem Web zu bekommen und auf my_test.py zu speichern. Aber das Programm my_test.py kollabiert viel (meine schlechte Programmierkenntnisse …) und ich versuche, seinen Status zu überwachen und es neu zu starten, wenn es zusammenbricht. Ich verwende den Teilprozess modular mit den folgenden Codes.

 import subprocess import time p = subprocess.Popen(['python.exe', r'D:\my_test.py'], shell=True) while True: try: stopped = p.poll() except: stopped = True if stopped: p = subprocess.Popen(['python.exe', r'D:\my_test.py'], shell=True) time.sleep(60) 

Aber wenn my_test.py zusammenbricht, springt ein Fenster- my_test.py heraus, um mich zu my_test.py , dass my_test.py unten ist und welche Aktion ich wählen werde: stop, debug … So etwas wie das. Und my_test.py scheint von den Alert-Fenstern gefroren und die oben genannten Codes können es nicht erfolgreich neu starten. Erst wenn ich das Fenster manuell schließe, wähle 'schließen', wird es wieder neu gestartet.

  • Multi-Server-Monitor / Auto Restarter in Python
  • Muss bei der Verwendung von Django auf Apache mit mod_wsgi neu starten
  • Brauchen Sie Hilfe, um eine Schleife hinzuzufügen, um Programm in Python neu zu starten
  • Django: Wie man Webserver neu startet, damit Änderungen im Quellcode angewendet werden
  • Es gibt eine Lösung für dieses Problem, so dass meine Codes können erfolgreich neu starten my_test.py wenn es bricht?

    Entschuldigung für die Unbequemlichkeit, die von meinem armen Englisch gebracht wurde, und danken im Voraus für Ihre freundlichen Ratschläge.

  • Warum ist Tkinter Entry's Funktion, die nichts zurückgibt?
  • One Solution collect form web for “Subprocess kann die gezielte python-datei nicht erfolgreich neu starten”

    Es gibt zwei Teile in deiner Frage:

    • Was mit dem Debug-Dialog zu tun ist. Du könntest das versuchen: Wie kann ich den Dialog "Debug / Close Application" unter Windows Vista deaktivieren?

    • Wie man das Skript automatisch neu startet

    Neustart

    Die Prioritätsordnung:

    1. Fix my_test.py , um zu vermeiden, zu krachen wegen bekannter Probleme
    2. Verwenden Sie ein Supervisor-Programm, um Ihr Skript wie upstart oder supervisord auszuführen – sie können es automatisch neu starten, wenn es abstürzt
    3. Schreibe dein eigenes Supervisor-Programm mit eigenen Bugs, die du pflegen musst

    Es ist am besten, sich auf die Optionen 1 und / oder 2 zu beschränken, wenn du ein bereits geschriebenes Supervisor-Programm findest, das unter Windows arbeitet ( upstart und supervisord nicht unter Windows).

    Ihr aktuelles Supervisor-Skript könnte verbessert werden, um zu vermeiden, eine Minute zu warten, bevor das Programm neu gestartet wird, nachdem es abstürzt, wenn es schon mehr als eine Minute läuft:

     #!/usr/bin/env python3 import sys import subprocess import time try: from time import monotonic as timer except ImportError: from time import time as timer # time() can be set back while True: earliest_next_start = timer() + 60 subprocess.call([sys.executable, r'D:\my_test.py']) while timer() < earliest_next_start: time.sleep(max(0, earliest_next_start - timer())) 
    Python ist die beste Programmiersprache der Welt.