Sich selbst neustarten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Vortec
User
Beiträge: 52
Registriert: Dienstag 10. Dezember 2002, 11:54

Sich selbst neustarten

Beitragvon Vortec » Montag 4. Oktober 2004, 12:49

Hallo,

habe folgendes Problem:
Ich will das eigene Pythonscript neustarten, das heisst, wenn Codeänderungen vorgenommen wurden, dass diese übernommen werden.
Bisher habe ich noch keine saubere Lösung dafür gefunden.
Auf irgendwelche Systembefehle möchte ich ungern zurückgreifen, da ich sehr auf Plattformunabhängigkeit achte.

Vielen Dank im Vorraus,
Vortec
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Montag 4. Oktober 2004, 13:48

Hi Vortec,

ich habs noch nicht versucht, aber das sollte doch mit os.exec* gehen

Code: Alles auswählen

#/usr/bin/env python

import os
import sys


print "Irgendwas"
rawinput("Enter druecken um neu zu starten ")
os.execvp("python", sys.argv) #starte python neu,  argumente = Scriptname ...



Gruß

Dookie

Code: Alles auswählen

#!/usr/bin/env python
import this
Vortec
User
Beiträge: 52
Registriert: Dienstag 10. Dezember 2002, 11:54

Beitragvon Vortec » Mittwoch 6. Oktober 2004, 10:49

Naja, eigentlich wollte ich ja auf Systembefehle verzichten.

Warum? Weil der Befehl zum Aufrufen unterschiedlich ist.

So funktioniert z.B. unter Windows:
- script.py
- c:\python24\python.exe script.py
Und unter Linux:
- python script.py
- python2.4 script.py
. ./script.py (wenn chmod +x und erste Zeile mit #!/ beginnt)

Allein das sind gerade mal 5 Möglichkeiten ein Pythonscript zu starten.
Den User den Pfad eintragen zu lassen ist mir zu unsauber.

Aber trotzdem danke für die Mühe!
Sonst noch Vorschläge?
pSy
User
Beiträge: 44
Registriert: Montag 4. Oktober 2004, 17:58
Kontaktdaten:

Beitragvon pSy » Mittwoch 6. Oktober 2004, 13:09

hmm... also das mit dem Pfad müsste auch vom Script aus zu lösen sein.
Irgendwie so:

Code: Alles auswählen

 import os.path,sys
print os.path.dirname(sys.argv[0])
joerg
User
Beiträge: 188
Registriert: Samstag 17. August 2002, 17:48
Wohnort: Berlin
Kontaktdaten:

Beitragvon joerg » Mittwoch 6. Oktober 2004, 13:46

Hallo Vortec,

es wird immer eigenwillige Aufrufmöglichkeiten geben, die so ein Ansatz nicht ganz abdeckt. Folgendes sollte aber für viele Fälle funktionieren:

- den Pythoninterpreter selbst bekommst Du über sys.executable

- das Hauptskript bekommst Du auch für schwierige Fälle über:

Code: Alles auswählen

p = sys.argv[0]
if not os.path.isabs(p):
    p = os.path.normpath(os.path.join(os.getcwd(), p))
myself = os.path.realpath(p)


Wenn Du nun noch sys.argv auf irgendwelche weiteren Parameter auswertest, kannst Du Dir eine funktionstüchtige Kommandozeile zusammenbauen, auch wenn es nicht unbedingt die originale ist.

Keine Gewähr, hauptsächlich unter Linux getestet!

Jörg
"Sie sind nicht berechtigt, unrechtmäßige Kopien dieses Datenträgers zu erstellen." - Microsoft-Weisheit auf einer CD von MS-VisualC++-6.0
Vortec
User
Beiträge: 52
Registriert: Dienstag 10. Dezember 2002, 11:54

Beitragvon Vortec » Sonntag 10. Oktober 2004, 17:25

Die Lösung sieht doch sehr schick aus, danke dafür!

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]