Wie kann ich feststellen, ein Python-Skript (Cygwin) in der aktuellen (oder relativen) Verzeichnissen zu arbeiten?

StackOverflow https://stackoverflow.com/questions/1117414

Frage

Ich habe viele Verzeichnisse mit Textdateien (g) vim geschrieben, und ich habe eine Handvoll Dienstprogramme geschrieben, dass ich nützlich in Python finden. Ich beginne das Dienstprogramme mit einer Pfund-bang- / usr / ist / env python Linie ab, um den Python zu verwenden, die unter Cygwin installiert ist. Ich möchte Befehle wie folgt eingeben:

% cd ~ / SomeBook

% der pythonUtil

/ usr / local / bin / pythonUtil

% pythonUtil ./infile.txt ./outfile.txt

(oder% pythonUtil someRelPath / infile.txt somePossiblyDifferentRelPath / outfile.txt)

pythonUtil: Gefunden infile.txt; Schreiben outfile.txt; Fertig (oder so, wenn überhaupt)

Allerdings halte meine pythonUtil Programme mir zu sagen, dass sie infile.txt nicht finden können. Wenn ich das Dienstprogramm in das aktuelle Arbeitsverzeichnis zu kopieren, ist alles gut, aber dann habe ich Kopien meiner Dienstprogramme die Landschaft verunreinigt. Was soll ich tun?

Noch eine Edit: Zusammengefasst --- was ich wollte, war os.path.abspath ( 'Dateiname'). Das gibt den absoluten Pfadnamen als String und dann alle Zweideutigkeit entfernt worden ist.

ABER: Wenn der Python verwendet wird derjenige unter Cygwin installiert ist, dann ist der absolute Pfadname wird ein CYGWIN-relativen Pfadnamen, wie /home/someUser/someDir/someFile.txt sein. Wenn jedoch der Python ist unter Windows installiert wurde (und werden hier von einer Cygwin-Terminal Kommandozeile aufgerufen wird), dann wird der absolute Pfadname wird der komplette Windows-Pfad, von ‚Laufwerk‘ auf nach unten, wie D: \ cygwin \ home \ someuser \ somedir \ somefile.txt.

Moral: Setzen Sie das Cygwin Python nicht erwarten, dass ein Windows-complete absoluten Pfadnamen für eine Datei bei nicht verwurzelt generieren /; es ist über seinen Ereignishorizont. Sie können jedoch mit dem Cygwin-Python zu einer Datei auf einem WinXP-System erreichen, wenn Sie den Dateipfad angeben „/ cygdrive / laufwerk“ leadin Konvention.

Hinweis: Sie ‚\‘ s nicht für Separatoren verwenden im WinXP Pfad auf der Cygwin-Kommandozeile; verwenden ‚/‘ s und der Schlange vertrauen. Keine Ahnung, warum, aber einig Separatoren fallen gelassen werden können und der Weg modifiziert werden kann, zusätzliche Ebene, wie „Dokumente und Einstellungen \ someuser“ und anderen Windows-Unsinn ist.

Dank der Responder für mich in die richtige Richtung schubsen.

War es hilfreich?

Lösung

Blick auf os.getcwd:

Edit: Für relative Pfade, bitte einen Blick auf das os.path Modul nehmen:

insbesondere os.path.join und os.path.normpath. Zum Beispiel:

import os
print os.path.normpath(os.path.join(os.getcwd(), '../AnotherBook/Chap2.txt'))

Andere Tipps

Was passiert, wenn Sie „ls“ geben? Haben Sie "infile.txt" aufgeführt dort?

os.chdir(my_dir)

oder

os.chdir(os.getcwd())
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top