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
Sich selbst neustarten
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi Vortec,
ich habs noch nicht versucht, aber das sollte doch mit os.exec* gehen
Gruß
Dookie
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 ...
Dookie
[code]#!/usr/bin/env python
import this[/code]
import this[/code]
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?
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?
hmm... also das mit dem Pfad müsste auch vom Script aus zu lösen sein.
Irgendwie so:
Irgendwie so:
Code: Alles auswählen
import os.path,sys
print os.path.dirname(sys.argv[0])
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:
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
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)
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
Die Lösung sieht doch sehr schick aus, danke dafür!
| [url=http://www.sourceforge.net/projects/propolice/]propolice[/url] | [url=http://del.icio.us/vortec/]bookmarks[/url] | [url=http://www.BlowIRC.net/]irc[/url] | [url=irc://irc.BlowIRC.net/python]#python[/url] |