Starten Sie ein Python-Programm neu

8

Ich schreibe ein Python-Programm, das, wenn der Benutzer beim Ausführen Einstellungen ändert, neu gestartet werden muss, um die geänderten Einstellungen zu übernehmen. Gibt es eine Möglichkeit, dies zu tun? Ich denke an etwas wie:

%Vor%

Hinweis: Ich bin auf Windows, wenn das einen Unterschied macht

    
Smashery 21.01.2010, 06:28
quelle

2 Antworten

8

Ich würde alle angst vermeiden, die Sie wahrscheinlich bekommen, wenn Sie versuchen, sich wieder in die hände der umwelt zu legen.

Damit meine ich:

  1. Verfügen Sie über ein Steuerungsprogramm, das lediglich Ihr Programm (mit denselben Parametern) in einer Schleife ausführt, während Ihr Programm mit einem bestimmten "Neustart" -Code beendet wird. Dies könnte so einfach wie eine cmd -Datei oder so komplex wie ein anderes (sehr einfaches) Python-Programm sein, das os.system verwendet). Solange das Steuerungsprogramm den Code "Neustart" erhält, wird es Ihr Programm mit genau den gleichen Parametern erneut ausführen. Jeder andere Code wird dazu führen, dass er mit diesem Code beendet wird.

  2. Wenn Sie vollständig beenden möchten, beenden Sie Ihr echtes Python-Programm mit dem Rückkehrcode 0 (oder irgendetwas, das in einer Fehlersituation nicht der "Neustart" -Code ist).

  3. Wenn Sie nur zu einer anderen Iteration Ihres Programms wechseln möchten (um z. B. die Konfiguration erneut zu lesen), beenden Sie mit dem vom Steuerungsprogramm erkannten "Neustart" -Code.

Aber Sie sollten auch darüber nachdenken, Ihre Anwendung neu zu entwickeln, damit sie ihre Konfiguration jederzeit erneut lesen kann. Dies wird das ganze Problem verschwinden lassen. Sie erwähnen nicht, warum das keine Option ist, also nehme ich an, Sie haben einen Grund, warum es nicht funktioniert.

Aber wenn du es nicht tust, wäre das der Weg, den ich wählen würde.

Um einen Beispielcode für die erste Option zur Verfügung zu stellen (dies ist unter Windows, aber unter Cygwin - sollten dieselben grundlegenden Regeln für Windows Native Python gelten, aber Sie sollten die Rückgabewerte von os.system überprüfen).:

%Vor%

%Vor%

%Vor%

Sie können den Controller mit einem Exit-Code von 9 sehen, um zu entscheiden, ob das Programm erneut ausgeführt werden soll. Das Programm selbst ist ein dummer, der 9 zurückgibt, es sei denn, es ist auf einem 10-Sekunden-Vielfachen.

    
paxdiablo 21.01.2010, 06:39
quelle
5

Unter Unix können Sie die os.excl -Familie von Funktionen:

  

Diese Funktionen führen alle ein neues Programm aus und ersetzen den aktuellen Prozess. sie kehren nicht zurück. Unter Unix wird die neue ausführbare Datei in den aktuellen Prozess geladen und hat dieselbe Prozess-ID wie der aufrufende Benutzer. Fehler werden als OSError-Ausnahmen gemeldet.

Unter Windows sehen Sie sich die os.spawnl an Familie, die weniger effizient als die Unix-Anrufe sind.

    
ars 21.01.2010 06:41
quelle

Tags und Links