2010-02-13 12 views
3

Mon script.py crée un fichier temporaire dans le même répertoire que le script.Comment connaître le chemin du script en cours d'exécution en Python?

Quand exécuter:

python script.py 

cela fonctionne fichier juste

mais il ne fonctionne pas lorsque vous exécutez:

python /path/to/script.py 

C'est parce que je suis sur un chemin relatif mon fichier temporaire dans script.py plutôt qu'un fichier absolu. Le problème est que je ne sais pas dans quel chemin il va fonctionner, donc j'ai besoin d'un moyen de le savoir dinamicalement.

Qu'en est-il?

os.path.abspath(os.path.dirname(__file__)) 

Répondre

7

par le grand Dive Into Python:

import sys, os 

print 'sys.argv[0] =', sys.argv[0]    1 
pathname = os.path.dirname(sys.argv[0])  2 
print 'path =', pathname 
print 'full path =', os.path.abspath(pathname) 
+1

Qu'en est-il de os.path.abspath (os.path.dirname (\ _ \ _ file__))? –

+0

J'entends '__file__' ne fonctionne pas sur Mac. – Shule

+0

Comme d'autres [great answer] (http://stackoverflow.com/a/1297407/1226722) qui explique exactement pourquoi '__file__' n'est pas ce que vous cherchez:' __file__' est le chemin du fichier en cours d'exécution (script ou module). C'est * accidentellement * le même que le script si on y accède à partir du script. – gregoltsov

0

Vous pouvez utiliser la méthode os.getcwd() pour connaître le répertoire de travail courant.

Return a string representing the current working directory. Availability: Unix, Windows.

Vous pouvez utiliser la méthode os.chdir(path) pour changer le répertoire de travail courant.

Change the current working directory to path. Availability: Unix, Windows.

+1

Cela répond à une question complètement différente de celle posée. –

7

Les deux réponses actuelles reflètent l'ambiguïté de votre question.

Lorsque vous avez exécuté python /path/to/script.py, où voulez-vous votre fichier temporaire? Dans l'annuaire actuel (./tempfile.txt) ou dans /path/to/tempfile.txt? Si le premier, vous pouvez simplement utiliser le chemin relatif (ou, à des fins étranges et obscures, obtenir le chemin absolu équivalent au répertoire courant comme le suggère @Desintegr, avec os.getcwd).

Dans ce dernier cas, vous pouvez savoir exactement comment le script a été appelé avec sys.argv[0], comme suggère @ Jonathan, et manipuler cette voie avec les fonctions os.path (vous pouvez bien sûr également appliquer ces fonctions à ce que os.getcwd rendements, si le l'ancien cas s'applique), ou travailler avec os.path.dirname(__file__) et similaires (ce dernier est nécessaire si vous voulez ce dernier comportement également lorsque le script est importé en tant que module, pas seulement lorsqu'il est exécuté en tant que script principal).

+0

Merci, je veux le fichier temporaire dans le même répertoire que le script.py –

+1

@Juanjo, puis 'os.path.dirname (__ fichier __)' est probablement le meilleur et la réponse que vous avez sélectionné en second lieu (car il en faut un more 'import' - de' sys' - qui utilise '__file__' évite). –

Questions connexes