Seite 1 von 1

Absoluten Pfad ausgeben

Verfasst: Donnerstag 8. Mai 2014, 09:15
von milexy86
Hallo,

ich schreibe zurzeit ein Skript das auf 30 Entwicklungsrechnern ausgeführt wird.Nehmen wir an, der Name des Haupt-Arbeitsverzeichnisses auf jedem Rechner ist der selbe, nähmlich "Working_Directory". Der apsolute Pfad zum "Working_Directory" ist auf jeden Rechner aber unterschiedlich. Beispielsweise könnte dies folgendermassen aussehen:

RECHNER A:
D:\Projektverzeichnis\Projekt\Working_Directory\

RECHNER B:
C:\Projektverzeichnis\Projekt\Variante_A\Working_Directory\

RECHNER C:
D:\Projektverzeichnis\meine_Projekte\Projekt_A\Working_Directory\

Beim ausführen des Skripts auf den jeweiligen Rechnern soll somit der apsolute Pfad zum "Working_Directory" ausgegeben werden. Wie ist das am einfachsten zu realisieren? :K

Vielen Dank im vorraus!

Re: Apsoluten Pfad ausgeben

Verfasst: Donnerstag 8. Mai 2014, 09:23
von /me
Meinst du jetzt wirklich das "working directory" oder das Directory in dem sich das Skript befindet?

Hier sind beide Varianten:

Code: Alles auswählen

print(os.getcwd())
print(os.path.dirname(__file__))

Re: Apsoluten Pfad ausgeben

Verfasst: Donnerstag 8. Mai 2014, 09:29
von mutetella
@milexy86
Wenn ich Dich richtig verstehe, suchst Du eine Möglichkeit, zu ermitteln, wo sich der Originalpfad eines Links befindet? Wenn dem so ist, dann suchst Du os.path.realpath und os.path.islink.

mutetella

Re: Apsoluten Pfad ausgeben

Verfasst: Donnerstag 8. Mai 2014, 09:51
von milexy86
Hallo,

danke euch für die Antwort. Etwas konkreter zu meiner Frage: Ich möchte den Pfad bis zum "Working_Directory" ausgeben (der bei jedem Rechner unterschiedlich ist). Das Skript selbst ist im Working_Directory drinen. Die Ordnerstruktur innerhalb von Working_Directory ist bei jedem Rechner strikt gleich.
Working Directory ist folgendermassen aufgebaut:

\01_SourceCode\....
\02_Architecture\...
\03_Quality\...
\Tools\...

Das Script befindet sich dann innerhalb von Tools, also \Tools\mein_script.py

Hoffe das es jetzt etwas verständlicher ist?

Re: Apsoluten Pfad ausgeben

Verfasst: Donnerstag 8. Mai 2014, 10:02
von BlackJack
@milexy86: Na dann ist es /me's zweite Variante um den Schritt ein Verzeichnis höher zu gehen erweitert. Plattformunabhängig ausgedrückt:

Code: Alles auswählen

os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))

Re: Apsoluten Pfad ausgeben

Verfasst: Donnerstag 8. Mai 2014, 11:14
von darktrym
Gibts einen besonderen Grund warum man __file__ verwenden will?
Ich meine sys.argv[0] funktioniert immer, __file__ macht Probleme, wenn man daraus ein Binary macht.

Re: Apsoluten Pfad ausgeben

Verfasst: Donnerstag 8. Mai 2014, 11:25
von BlackJack
@darktrym: ``argv[0]`` funktioniert auch nicht immer. Das kann zum Beispiel Probleme machen wenn jemand einen Link auf das Programm setzt. Oder das Modul von einem anderen Modul in einem anderen Pfad importiert. Denn wenn man `__file__` verwendet, möchte man ja den Pfad relativ zu *diesem* Modul, unabhängig davon wie das importiert oder ausgeführt wurde. Einen wirklich 100% zuverlässigen Weg gibt es sowieso nicht, da sollte man immer noch eine zusätzliche, andere Möglichkeit für den Anwender bieten, wie Umgebungsvariablen oder Optionen beim Aufruf.

Re: Apsoluten Pfad ausgeben

Verfasst: Donnerstag 8. Mai 2014, 12:33
von milexy86
@/me
@moderator

vielen Dank, funktioniert!

LG