Absoluten Pfad ausgeben

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
milexy86
User
Beiträge: 22
Registriert: Freitag 7. Februar 2014, 16:33

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!
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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__))
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@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
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
milexy86
User
Beiträge: 22
Registriert: Freitag 7. Februar 2014, 16:33

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?
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))
Benutzeravatar
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

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.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
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.
milexy86
User
Beiträge: 22
Registriert: Freitag 7. Februar 2014, 16:33

@/me
@moderator

vielen Dank, funktioniert!

LG
Antworten