229 votos

En Python, ¿cómo puedo obtener la ruta y nombre del archivo que se está ejecutando actualmente?

He secuencias de comandos llamadas a otros los archivos de script, pero tengo que sacar la ruta de acceso del archivo que se está ejecutando actualmente en el proceso. Por ejemplo, digamos que tengo tres archivos. El uso de execfile, script_1.py llamadas script_2.py. A su vez, script_2.py llamadas script_3.py. ¿Cómo puedo obtener el nombre de archivo y ruta de acceso de script_3.py *desde el código dentro de script_3.py* sin tener que pasar esa info como argumentos de script_2.py? (Ejecución de os.getcwd() devuelve el original a partir del guión de la ruta de archivo no el archivo actual.)

187voto

user13993 Puntos 257
 __file__
 

como otros han dicho. Es posible que desee utilizar:

 os.path.realpath(__file__)
 

152voto

Pat Notz Puntos 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
 

23voto

Usagi Puntos 1004

Creo que esto es más limpio:

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

y obtiene la misma información que:

 print inspect.getfile(inspect.currentframe())
 

Donde [0] es el marco actual de la pila (parte superior de la pila) y [1] es el nombre del archivo, aumento para retroceder en la pila es decir,

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

sería el nombre de archivo del script que llama al marco actual. Además, el uso [-1] para poder llegar a la parte inferior de la pila, el guión de llamada originales.

11voto

Blair Conrad Puntos 56195

No es del todo claro a qué te refieres por "la ruta de acceso del archivo que se está ejecutando actualmente en el proceso". sys.argv[0] generalmente contiene la ubicación de la secuencia de comandos que fue invocada por el intérprete de Python. Compruebe el sys documentación para más detalles.

Como @Tim y @Pat, Ni han señalado, la __file__ atributo proporciona acceso a

el archivo desde el que el módulo se cargado, si se carga desde un archivo

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X