Anwendungspfad herausfinden

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.
Antworten
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Hallo

Da ich mit Inno Setup einen Installer gemacht habe und nun auf eine Datei (in einem unterordner) zugreifen sollte, muss ich den Programmpfad kennen.

Mein erster Versuch war so...

Code: Alles auswählen

strDatei = os.path.join(os.path.realpath(os.path.curdir), "Config", sys.argv[1])
Nur, wenn ich auf das Icon im Startmenü klicke, startet er die Anwendung aus dem Benutzerverzeichnis C:\Dokumente und Einstellungen\%username%

Wie komme ich immer an den Echten Pfad?

Gruess Micha
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

DatenMetzgerX hat geschrieben:Wie komme ich immer an den Echten Pfad?
Hi Micha!

__file__ oder sys.argv[0]

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

vielleicht brauchst du auich gar nicht den pfad.
es hört sich so an, als ob du einfach

Code: Alles auswählen

os.path.join(".","deine_datei")
schreiben könntest.
wie bekannt, wird der punkt automatisch durch das jetzige verzeichnis ersetzt.
:-)
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

geht nicht, habe ich am anfang auch versucht

Wenn man das Programma ber über die Verknüpfung im Startmenü öffnet, ist der . Pfad == C:\Dokumente und Einstellungen\%username%
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

mit Gerolds tipp sollte es funzen. 8)
mfg

Thomas :-)
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Code: Alles auswählen

os.path.join(string.join(os.path.split(__file__)[:-1], '\\'), "Error.txt")
Ein bisschen kompliziert gelöst ^^

Wenn ich das ganze nun aber freeze mit py2exe, kommt die Fehlermeldung, __file__ sei nicht definiert???

Code: Alles auswählen

Traceback (most recent call last):
  File "Backup.py", line 26, in ?
NameError: name '__file__' is not defined
Edit:// Mit sys.argv[0] will ich es nicht machen, das funktioniert nur, wenn das Programm mit dem ganzen Anwendungspfad aufgerufen wird. Wenn allerdings in der cmd nur der Programmname angegeben wird (weil ich schon in dem Verzeichnis bin, geht es nicht :()
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

DatenMetzgerX hat geschrieben:

Code: Alles auswählen

os.path.join(string.join(os.path.split(__file__)[:-1], '\\'), "Error.txt")
[...]
Wenn ich das ganze nun aber freeze mit py2exe, kommt die Fehlermeldung, __file__ sei nicht definiert???
Hi DatenMetzgerX!

Dieses Problem hatte ich auch schon. So sieht mein Workaround aus:

Code: Alles auswählen

# Workaround fuer cx_freeze
try:
    __file__ = __file__
except:
    __file__ = sys.executable
Irgendwie verstehe ich es ja auch. __file__ gibt den Pfad zur aktuellen Python-Datei zurück. Beim Freezen werden normalerweise mehrere Python-Dateien zu einer Datei zusammengefasst. Damit gibt die Abfrage von __file__ keinen Sinn mehr. Da die ausführende Datei jetzt nicht mehr der Python-Interpreter ist, sondern die EXE-Datei, kann man mit sys.executable den Namen und den Pfad zu dieser abfragen.

Code: Alles auswählen

os.path.join(os.path.split(__file__)[:-1], "Error.txt")
lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten