Comment puis-je dire un script Python (Cygwin) pour travailler dans des répertoires actuels (ou relatifs)?

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

Question

J'ai beaucoup de répertoires avec des fichiers texte écrit en utilisant (g) vim, et je l'ai écrit une poignée d'utilitaires que je trouve utile en Python. Je commence les utilitaires avec un livre-Bang-/ usr / bin / ligne env python pour utiliser Python qui est installé sous Cygwin. Je voudrais saisir des commandes comme ceci:

% cd ~ / SomeBook

% qui pythonUtil

/ usr / local / bin / pythonUtil

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

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

pythonUtil: Trouvé infile.txt; L'écriture outfile.txt; Fait (ou quelque chose comme, le cas échéant)

Cependant, mes programmes de pythonUtil me disent qu'ils ne peuvent pas trouver infile.txt. Si je copie l'utilitaire dans le répertoire de travail en cours, tout va bien, mais je les copies de mes utilitaires qui jonchent le paysage. Que dois-je faire?

Encore un autre Edit: Pour résumer --- ce que je voulais était os.path.abspath ( 'filename'). Qui renvoie le chemin absolu comme une chaîne, puis toute ambiguïté a été supprimée.

: si le Python utilisé est celui installé sous Cygwin, alors le chemin absolu sera un chemin CYGWIN-parent, comme /home/someUser/someDir/someFile.txt. Cependant, si le Python a été installé sous Windows (et est ici d'être appelé à partir d'une ligne de commande terminal Cygwin), le chemin absolu sera le chemin Windows complet, de « dur » vers le bas, comme D: \ Cygwin \ home \ someUser \ somedir \ somefile.txt.

Moral: Ne vous attendez pas Cygwin Python pour générer un chemin absolu Windows complet pour un fichier non ancré à /; il est au-delà de son horizon d'événement. Cependant, vous pouvez rejoindre à tout fichier sur un système Windows XP avec le Cygwin-python si vous spécifiez le chemin du fichier en utilisant le « / cygdrive / lettreLecteur » convention leadin.

Remarque: Ne pas utiliser « \ » s pour les séparateurs dans le chemin sur la Cygwin Windows XP commandline; utiliser l « / » et faire confiance au serpent. Aucune idée pourquoi, mais certains séparateurs peuvent être déposés et le chemin peuvent être modifiés pour inclure des niveaux supplémentaires, tels que « Documents and Settings \ someUser » et autres balivernes de Windows.

Merci aux intervenants pour me pousser dans la bonne direction.

Était-ce utile?

La solution

Regardez os.getcwd:

Edit: Pour les chemins relatifs, s'il vous plaît jeter un oeil sur le module os.path:

en particulier, os.path.join et os.path.normpath. Par exemple:

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

Autres conseils

Qu'est-ce qui se passe quand vous tapez « ls »? Ne voyez-vous "infile.txt" il dans la liste?

os.chdir(my_dir)

ou

os.chdir(os.getcwd())
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top