OVH Cloud OVH Cloud

recuperer le repertoire

13 réponses
Avatar
NonSenZ
Bonjour,

Je cherche à savoir dans quel répertoire est installé mon script python.
J'ai cherché dans les modules os et sys mais sans succès.

Pour être clair :
J'ai un script python /home/toto/bin/script.py
Je voudrais récupérer /home/toto/bin.

Or avec os.getcwd(), je récupère le répertoire dans lequel je suis
quand je lance le script (ie si je suis dans /home/toto et que je tape
bin/script.py, os.getcwd() me reverra/home/toto).

Je peux bidouiller avec sys.argv[0] et os.getcwd() mais je pense qu'il y a
quelque chose de beaucoup plus simple que je n'ai pas vu ?

Merci d'avance.

--
NSZ

10 réponses

1 2
Avatar
Bruno Desthuilliers
Bonjour,

Je cherche à savoir dans quel répertoire est installé mon script python.


bruno $ cat playground/whereami.py
import os, os.path
print os.path.dirname(os.path.join(os.getcwd(), __file__))

bruno $ python playground/whereami.py
/home/bruno/playground


Merci d'avance.


De rien.

Avatar
Do Re Mi chel La Si Do
Bonsoir !

Ou, plus simplement : os.path.dirname(__file__)

@-salutations

Michel Claveau
Avatar
NonSenZ
Le Mon, 19 Sep 2005 20:26:27 +0200, Bruno Desthuilliers a écrit :

Bonjour,

Je cherche à savoir dans quel répertoire est installé mon script python.


bruno $ cat playground/whereami.py
import os, os.path
print os.path.dirname(os.path.join(os.getcwd(), __file__))

bruno $ python playground/whereami.py
/home/bruno/playground
---

Oui, c'est ça. Il y a juste un problème quand on lance le script avec
./whereami.py quand on est dans le répertoire playground. On obtient
alors /home/bruno/playground/. mais c'est facile à gérer. Ta méthode
revient exactement à la mienne, je voulais juste être sûr qu'il n'y ait
pas plus clean.

Merci !

--
NSZ


Avatar
NonSenZ
Le Mon, 19 Sep 2005 22:23:22 +0200, Do Re Mi chel La Si Do a écrit :

Bonsoir !

Ou, plus simplement : os.path.dirname(__file__)
---

Nope, ne renvoie pas le chemin absolu du script. Par exemple si on le
lance depuis le répertoire en tapant ./script.py,
os.path.dirname(__file__) renvoie .

--
NSZ

Avatar
NonSenZ
Le Mon, 19 Sep 2005 23:36:57 +0200, Bruno Desthuilliers a écrit :

Je voulais bien sûr dire:
print os.path.dirname(os.path.realpath(__file__))
---

Cette fois c'est parfait.

Merci beaucoup.

--
NSZ

Avatar
Bruno Desthuilliers

Bonjour,

Je cherche à savoir dans quel répertoire est installé mon script python.



bruno $ cat playground/whereami.py
import os, os.path
print os.path.dirname(os.path.join(os.getcwd(), __file__))


OOPS !

Je voulais bien sûr dire:
print os.path.dirname(os.path.realpath(__file__))


Avatar
Bruno Desthuilliers
Bonsoir !

Ou, plus simplement : os.path.dirname(__file__)


qui renvoie un chemin relatif, et non un chemin absolu.
(NB : cf mon correctif, je n'avais pas posté la bonne version...)

Avatar
Do Re Mi chel La Si Do
Bonjour !

Curieux, mais, chez moi, .script.py me renvoie bien le répertoire absolu.
Encore une différence entre les OS ?

En tout cas, ma proposition fonctionne bien sous XP.

@-salutations

Michel Claveau
Avatar
Do Re Mi chel La Si Do
Bonjour !

Voir ma réponse à NonSenZ

@-salutations

Michel Claveau
Avatar
bruno modulix
Do Re Mi chel La Si Do wrote:
Bonjour !

Curieux, mais, chez moi, .script.py me renvoie bien le répertoire absolu.
Encore une différence entre les OS ?


Là, ce serait embêtant - ou au moins un gotcha. Que vaut __file__ sous
XP ? chemin absolu ou chemin relatif ?

En tout cas, ma proposition fonctionne bien sous XP.


Est-ce que la mienne (la bonne !-) fonctionne bien sous XP ?

NB : Ce serait bien, si on tire ça au clair, de le rajouter dans le wiki
(tiens, au fait, ça n'y est pas déjà ? J'ai pas pensé à regarder...).

--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"

1 2