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

Anwendungspfad herausfinden

Beitragvon DatenMetzgerX » Montag 26. Juni 2006, 08:12

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Anwendungspfad herausfinden

Beitragvon gerold » Montag 26. Juni 2006, 08:34

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:

Beitragvon murph » Montag 26. Juni 2006, 20:10

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)

Beitragvon DatenMetzgerX » Montag 26. Juni 2006, 20:49

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

Beitragvon Python 47 » Montag 26. Juni 2006, 22:10

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)

Beitragvon DatenMetzgerX » Mittwoch 28. Juni 2006, 07:20

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Mittwoch 28. Juni 2006, 07:37

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.

Wer ist online?

Mitglieder in diesem Forum: brainstir