Ich habe einen Watchdog-Timer für mein Skript (Python 3) erstellt, mit dem ich die Ausführung stoppen kann, wenn etwas schief geht (im folgenden Code nicht gezeigt). Allerdings hätte ich gerne die Möglichkeit, das Skript automatisch nur mit Python (keine externen Skripte) neu zu starten. Der Code muss plattformübergreifend kompatibel sein.Erneutes Neustarten eines Python-Skripts
Ich habe Subprozess und execv (os.execv(sys.executable, ['python'] + sys.argv)
) versucht, aber ich sehe sehr seltsame Funktionalität auf Windows. Ich öffne die Befehlszeile und führe das Skript aus ("python myscript.py"). Das Skript wird beendet, aber nicht beendet (wird im Task-Manager überprüft). Es wird nicht neu gestartet, es sei denn, ich drücke zweimal die Eingabetaste. Ich möchte, dass es automatisch funktioniert.
Irgendwelche Vorschläge? Danke für Ihre Hilfe!
import threading
import time
import subprocess
import os
import sys
if __name__ == '__main__':
print("Starting thread list: " + str(threading.enumerate()))
for _ in range(3):
time.sleep(1)
print("Sleeping")
''' Attempt 1 with subprocess.Popen '''
# child = subprocess.Popen(['python',__file__], shell=True)
''' Attempt 2 with os.execv '''
args = sys.argv[:]
args.insert(0, sys.executable)
if sys.platform == 'win32':
args = ['"%s"' % arg for arg in args]
os.execv(sys.executable, args)
sys.exit()
Danke für die Antwort! Das Problem, das ich habe, ist nicht mit Skript, das nicht angezeigt wird, sondern mit dem Code, der gepostet wird. Es stellt sich heraus, dass es gut funktioniert, wenn ich das Skript doppelt in Windows laufe, aber wenn ich "python myscript.py" von der Kommandozeile aus tue, funktioniert es nicht. Keine aktuellen Probleme in Linux. – NJC