__file__
est pas ce que vous recherchez. Ne pas utiliser accidentellement des effets secondaires
sys.argv[0]
est-toujours le chemin du script (si, en fait, a été invoqué un script) - voir http://docs.python.org/library/sys.html#sys.argv
__file__
est le chemin de l'en cours d'exécution fichier (script ou module). C'est accidentellement le même que le script si on accède à partir du script! Si vous voulez mettre des choses utiles comme localiser des fichiers de ressources relatifs à l'emplacement du script dans une bibliothèque, vous devez utiliser sys.argv[0]
.
Exemple:
C:\junk\so>type \junk\so\scriptpath\script1.py
import sys, os
print "script: sys.argv[0] is", repr(sys.argv[0])
print "script: __file__ is", repr(__file__)
print "script: cwd is", repr(os.getcwd())
import whereutils
whereutils.show_where()
C:\junk\so>type \python26\lib\site-packages\whereutils.py
import sys, os
def show_where():
print "show_where: sys.argv[0] is", repr(sys.argv[0])
print "show_where: __file__ is", repr(__file__)
print "show_where: cwd is", repr(os.getcwd())
C:\junk\so>\python26\python scriptpath\script1.py
script: sys.argv[0] is 'scriptpath\\script1.py'
script: __file__ is 'scriptpath\\script1.py'
script: cwd is 'C:\\junk\\so'
show_where: sys.argv[0] is 'scriptpath\\script1.py'
show_where: __file__ is 'C:\\python26\\lib\\site-packages\\whereutils.pyc'
show_where: cwd is 'C:\\junk\\so'
duplication possible de [Comment obtenir le chemin complet du répertoire du fichier actuel en Python?] (Http://stackoverflow.com/questions/3430372/how-to-get-full-path-of-current-files-directory -in-python) Cela est arrivé plus tôt, mais c'est plus explicite. Ou: http://stackoverflow.com/questions/50499/in-python-how-do-i-get-the-path-and-name-of-the-file-that-is-currently-executin –