Seite 1 von 1

Anwendungspfad herausfinden

Verfasst: Montag 26. Juni 2006, 08:12
von DatenMetzgerX
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

Re: Anwendungspfad herausfinden

Verfasst: Montag 26. Juni 2006, 08:34
von gerold
DatenMetzgerX hat geschrieben:Wie komme ich immer an den Echten Pfad?
Hi Micha!

__file__ oder sys.argv[0]

lg
Gerold
:-)

Verfasst: Montag 26. Juni 2006, 20:10
von murph
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.
:-)

Verfasst: Montag 26. Juni 2006, 20:49
von DatenMetzgerX
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%

Verfasst: Montag 26. Juni 2006, 22:10
von Python 47
mit Gerolds tipp sollte es funzen. 8)

Verfasst: Mittwoch 28. Juni 2006, 07:20
von DatenMetzgerX

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 :()

Verfasst: Mittwoch 28. Juni 2006, 07:37
von gerold
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
:-)