Seite 1 von 1

Verzeichnis behalten?

Verfasst: Mittwoch 13. August 2003, 13:58
von Andi
hallo,

folgender code startet am anfang eines scriptes. aus dem libs ordner importiere ich verschiedene superklassen.

sys.path.append(os.getcwd())
sys.path.append(os.getcwd()+"\\libs\\")

im aktuellen verzeichnis gibt es einen image ordner mit verschiedenen Bildern. wenn ich bilder dann versuche zu laden (mit os.getcwd()+r"bildpfad") versucht er diese aus os.getcwd()+"\libs\"+bildpfad zu laden.

wo ist dabei das problem da der cwd normalerweise doch der pfad sein sollte der das gerade ausgeführte skript enthält.

mfg andi

Re: Verzeichnis behalten?

Verfasst: Mittwoch 13. August 2003, 14:46
von joerg
Andi hat geschrieben: wo ist dabei das problem da der cwd normalerweise doch der pfad sein sollte der das gerade ausgeführte skript enthält.

mfg andi
Nein. Dein CWD ist das aktuelle Arbeitsverzeichnis, das muß nichts mit dem Ort des Skriptes zu tun haben. Wenn deine Bilder relativ zum Skript liegen, mußt Du zuerst den genauen Ort deines Skriptes herausfinden. Oder Du adressierst die Bilder absolut, mit ganzem Pfad.

Zum Aneinanderhängen von Pfaden würde ich übrigens immer os.path.join nehmen!

Jörg

und nochmal

Verfasst: Donnerstag 14. August 2003, 12:52
von Andi
und wie bekomme ich das verzeichnis in dem sich das Skript befindet?

Re: und nochmal

Verfasst: Donnerstag 14. August 2003, 16:41
von joerg
Andi hat geschrieben:und wie bekomme ich das verzeichnis in dem sich das Skript befindet?
Zum Beispiel mit dieser Funktion (habe ich bisher nur unter Linux getestet):

Code: Alles auswählen

def home_path(resolve_links=0):
    p = sys.argv[0]
    if not os.path.isabs(p):
        p = os.path.normpath(os.path.join(os.getcwd(), p))
    if resolve_links:
        p = os.path.realpath(p)
    return os.path.split(p)[0]
Entweder das Skript wird schon mit absolutem Pfad gerufen, dann nehmen wir den. Oder wir müssen den relativen Pfad mit dem aktuellen Arbeitsverzeichnis (cwd) verknüpfen, um dorthin zu gelangen. Um sicherzugehen, sollte resolve_links allerdings auf 1 gesetzt werden, da sonst bei Softlinks die Auflösung eventuell fehlschlägt.

Viel Glück,
Jörg