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

3 réponses

1 2
Avatar
Do Re Mi chel La Si Do
Bonsoir !


Ta solution fonctionne très bien sous XP. En fait, est donne la même chose
que la mienne.

__file__ , sous XP, donne l'ensemble (Path_absolu + nom_du_script) ; et
cela, que l'on soit dans le répertoire, dans le parent, dans un enfant, ou
avec un appel du genre .script.py

J'ai déjà eu des différences avec le module glob, qui sous windows, ne
fonctionne pas comme attendu (mais, ça, c'est marqué dans la doc).

Je suis intéressé pour (a)voir/participer (à) une liste des "variations" de
comportement de Python (et des librairies), entre différents OS ; à
condition que l'on se contente de les lister, en évitant des trolls de
jugement.


@-salutations

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


Ta solution fonctionne très bien sous XP. En fait, est donne la même chose
que la mienne.

__file__ , sous XP, donne l'ensemble (Path_absolu + nom_du_script)
; et
cela, que l'on soit dans le répertoire, dans le parent, dans un enfant, ou
avec un appel du genre .script.py


Ok. Sous Linux, __file__ retourne un chemin relatif - ou, plus
exactement, le chemin par lequel on a lancé le script.

# le script
~/playground $ cat chemin.py
#!/usr/bin/python
import os.path
print "__file__ : %s" % __file__
print "os.path.abspath(__file__) : %s " % os.path.abspath(__file__)
print "os.path.realpath(__file__) : %s " % os.path.realpath(__file__)

# en local
~/playground $ ./chemin.py
__file__ : ./chemin.py
os.path.abspath(__file__) : /home/bruno/playground/chemin.py
os.path.realpath(__file__) : /home/bruno/playground/chemin.py

# depuis un sous-répertoire
~/playground $ cd bash/
~/playground/bash $ ../chemin.py
__file__ : ../chemin.py
os.path.abspath(__file__) : /home/bruno/playground/chemin.py
os.path.realpath(__file__) : /home/bruno/playground/chemin.py

# depuis le répertoire parent
~/playground $ cd ../..
~ $ playground/chemin.py
__file__ : playground/chemin.py
os.path.abspath(__file__) : /home/bruno/playground/chemin.py
os.path.realpath(__file__) : /home/bruno/playground/chemin.py

# depuis un autre répertoire
~ $ cd docs
~/docs $ ../playground/chemin.py
__file__ : ../playground/chemin.py
os.path.abspath(__file__) : /home/bruno/playground/chemin.py
os.path.realpath(__file__) : /home/bruno/playground/chemin.py

# en passant le chemin complet:
~/playground/bash $ cd
~ $ /home/bruno/playground/chemin.py
__file__ : /home/bruno/playground/chemin.py
os.path.abspath(__file__) : /home/bruno/playground/chemin.py
os.path.realpath(__file__) : /home/bruno/playground/chemin.py

Peux-tu faire le même test sous XP, stp ?

J'ai déjà eu des différences avec le module glob, qui sous windows, ne
fonctionne pas comme attendu (mais, ça, c'est marqué dans la doc).


Ca peut quand même valoir le coup de redonder l'info dans le wiki, pour
ceux qui ne Relisent pas le Très Fameux Manuel(tm).

Je suis intéressé pour (a)voir/participer (à) une liste des "variations" de
comportement de Python (et des librairies), entre différents OS ;


Bon bin on a déjà un exemple à mettre dans le Wiki. Tu t'en charge ou
bien je ?

à
condition que l'on se contente de les lister, en évitant des trolls de
jugement.


<mode="hypocrite">
Moi, troller ? Jamais !-)
</mode>


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

Avatar
Do Re Mi chel La Si Do
Bonsoir !

Vas-y, met ta prose sur le Wiki. Je suis trop débordé en ce moment, et j'ai
toujours eu beaucoup de mal à y poster quelque chose (je n'ai réussi qu'une
seule fois).

Pour les tests, il faudra attendre un peu ; car je suis vraiment débordé.

@-salutations

Michel Claveau



PS : si quelqu'un se sent d'attaque, il pourrait s'inscrire, dimanche, pour
le 18e critérium du Rhône, une épreuve de canoë kayak (descente régionale et
coupe des jeunes).
Inscription en ligne, sur un serveur web Python maison (dérivé, mais
largement modifié, des exemples d'utilisation d'asyncore, dans le cookbook)
1 2