Tja. Not to something completly different.
Ich möchte aus einem Python Programm den kompletten interpreter call wiederholen und dann den aktuellen Prozess dadurch ersetzen.
* user startet "python myfile.py runserver -q"
* myfile.py beendet sich selber und ruft wieder "python myfile.py runserver -q" auf
Wie bekomm ich das hin?
Interpreter Klonen
-
- User
- Beiträge: 670
- Registriert: Sonntag 15. Januar 2006, 18:42
- Wohnort: Celle
- Kontaktdaten:
Unter *nix:
Ersetzt das momentane Runtime-Environment durch einen neuen Python-Interpreter, der die selben Argumente bekommt wie der letzte. Weitere Doku im os-Modul.
--- Heiko.
Code: Alles auswählen
import os
import sys
os.execlp("python","python",*sys.argv)
--- Heiko.
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
hm. ich hab jetzt selber auch eine Lösung:
funktioniert, ist aber irgendwie in meinen augen ein arger hack.
Code: Alles auswählen
#snip
import gc
for obj in gc.get_objects():
if hasattr(obj, '__del__'):
try:
obj.__del__()
except:
pass
args = [sys.executable] + sys.argv
os.execv(sys.executable, args)
#snap
TUFKAB – the user formerly known as blackbird
Ist ja faszinierend das das geht, und nicht erst der exec ausgeführt wird und danach der aufrufende Python Code weiterläuft.
Steht nichtmal in der Referenz wie ich sehe
(bzw hab ich execlp nicht gefunden)
Wo macht sowas sinn ? Kann mir nämlich gerade nicht vorstellen wo man das einsetzen kann.
Steht nichtmal in der Referenz wie ich sehe

(bzw hab ich execlp nicht gefunden)
Wo macht sowas sinn ? Kann mir nämlich gerade nicht vorstellen wo man das einsetzen kann.

-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Im autoreloader Teil des Colubrid WSGI standalone webserversMad-Marty hat geschrieben:Wo macht sowas sinn ? Kann mir nämlich gerade nicht vorstellen wo man das einsetzen kann.

TUFKAB – the user formerly known as blackbird
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Unter Windows hatte ich dafür einfach eine Batch Datei gemacht: http://www.python-forum.de/viewtopic.php?p=23597#23597
Unter Linux könnte man dafür doch ein sh Skript machen, oder?
Über einen returncode könnte man entscheiden, ob der Server wirklich per KeyboardInterrupt beendet wurde, wenn nicht, wird er neu gestartet...
Unter Linux könnte man dafür doch ein sh Skript machen, oder?
Über einen returncode könnte man entscheiden, ob der Server wirklich per KeyboardInterrupt beendet wurde, wenn nicht, wird er neu gestartet...
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Klar - in Linux werden oft Scripte benutzt, die Server überwachen und neustarten wenn sie sterben - aber warum überhaupt so etwas machen, wenn es doch mit Python-Bordmitteln geht? Das hat den Vorteil, dass es unabhängig vom Betriebssystems funktioniert.. denn sonst müsstest du umabhängig voneinander Batchdateien und Shellscripte pflegen (btw, Batchscripte sind unangenehm zu programmieren).jens hat geschrieben:Unter Windows hatte ich dafür einfach eine Batch Datei gemacht: http://www.python-forum.de/viewtopic.php?p=23597#23597
Unter Linux könnte man dafür doch ein sh Skript machen, oder?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Weil ich dafür ein Skript anlegen muss. So wird automatisch jede Colubrid Anwendung zu einer Serveranwendung, auch ohne name Hook.jens hat geschrieben:Unter Windows hatte ich dafür einfach eine Batch Datei gemacht: http://www.python-forum.de/viewtopic.php?p=23597#23597
Unter Linux könnte man dafür doch ein sh Skript machen, oder?
Über einen returncode könnte man entscheiden, ob der Server wirklich per KeyboardInterrupt beendet wurde, wenn nicht, wird er neu gestartet...
Code: Alles auswählen
from colubrid import BaseApplication
class Application(BaseApplication):
def process_request(self):
self.request.write("Hallo Welt")
app = BaseApplication
TUFKAB – the user formerly known as blackbird