527 votes

En Python, comment puis-je obtenir le chemin d'accès et nom du fichier qui est en cours d'exécution?

J'ai des scripts de l'appel à d'autres fichiers de script mais j'ai besoin d'obtenir le chemin d'accès du fichier qui est actuellement en cours d'exécution dans le processus. Par exemple, disons que j'ai trois fichiers. À l'aide de execfile, script_1.py appels script_2.py. À son tour, script_2.py appels script_3.py. Comment puis-je obtenir le nom de fichier et le chemin d'accès de script_3.py *à partir du code à l'intérieur script_3.py* sans avoir à passer cette info que l'argument de script_2.py? (L'exécution de l'os.getcwd() retourne l'original script de démarrage du filepath pas le fichier en cours.)

598voto

user13993 Points 257
__file__

comme d'autres l'ont dit. Vous pouvez utiliser:

os.path.realpath(__file__)

276voto

Pat Notz Points 46841

p1.py:

execfile("p2.py")

p2.py:

import inspect, os
print inspect.getfile(inspect.currentframe()) # script filename (usually with path)
print os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) # script directory

74voto

Usagi Points 1004

Je pense que c'est plus propre:

import inspect
print inspect.stack()[0][1]

et obtient les mêmes informations que:

print inspect.getfile(inspect.currentframe())

Où [0] est l'image courante dans la pile (en haut de la pile) et [1] pour le nom de fichier, l'augmentation de revenir en arrière dans la pile, c'est à dire

print inspect.stack()[1][1]

serait le nom de fichier du script qui appelle l'image en cours. Aussi, à l'aide de [-1] vous rendre sur le bas de la pile, l'original script d'appel.

14voto

vishal ekhe Points 99
import os
print os.path.basename(__file__)

cela nous donnera le nom du fichier uniquement. c'est à dire si abspath de fichier est c:\abcd\abc.py puis la 2ème ligne d'impression abc.py

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X