Domanda

Ho un sacco di directory con i file di testo scritte utilizzando (g) vim, e ho scritto una manciata di programmi di utilità che trovo utile in Python. Comincio le utilità con una linea di pitone libbra-bang- / usr / bin / env al fine di utilizzare Python che viene installato sotto Cygwin. Vorrei digitare i comandi in questo modo:

% cd ~ / SomeBook

% che pythonUtil

/ usr / local / bin / pythonUtil

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

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

pythonUtil: infile.txt Trovato; Scrivendo outfile.txt; Fatto (o qualcosa di simile, se non altro)

Tuttavia, i miei programmi pythonUtil continuano a dirmi che non riescono a trovare infile.txt. Se copio l'utilità nella directory di lavoro corrente, va tutto bene, ma poi ho copie dei miei programmi di utilità sporcare il paesaggio. Cosa dovrei fare?

Ancora un altro Modifica: Per riassumere --- quello che volevo era os.path.abspath ( 'filename'). Che restituisce il percorso assoluto come una stringa, e quindi ogni ambiguità è stato rimosso.

BUT: IF Python utilizzato è quello installato sotto Cygwin, ALLORA il percorso assoluto sarà un percorso CYGWIN-relativo come /home/someUser/someDir/someFile.txt. Tuttavia, se il Python è stato installato sotto Windows (ed è qui di essere chiamato da una linea di comando del terminale Cygwin), allora il percorso assoluto sarà il percorso completo di Windows, da 'auto' in giù, come D: \ cygwin \ home \ someuser \ somedir \ somefile.txt.

Morale: Non aspettatevi il cygwin Python per generare un percorso assoluto Windows completo per un file non radice in /; è oltre il suo orizzonte degli eventi. Tuttavia, è possibile entrare in contatto con qualsiasi file su un sistema di WinXP con il cygwin-python se si specifica il percorso del file utilizzando il "/ cygdrive / unità" convenzione leadin.

Nota: non utilizzare '\' s per i separatori nel percorso WinXP sulla riga di comando Cygwin; usare '/' s e la fiducia del serpente. Nessuna idea perché, ma alcuni separatori possono essere eliminate e il percorso possono essere modificati per includere livelli extra, come ad esempio "Documents and Settings \ someuser" e altre sciocchezze di Windows.

Grazie ai soccorritori per me spingendo nella giusta direzione.

È stato utile?

Soluzione

Guardate os.getcwd:

Modifica: Per i percorsi relativi, si prega di dare un'occhiata al modulo os.path:

in particolare, os.path.join e os.path.normpath. Per esempio:

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

Altri suggerimenti

Che cosa succede quando si digita "ls"? Vedete "infile.txt" elencati lì?

os.chdir(my_dir)

o

os.chdir(os.getcwd())
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top