tutorial lenguaje español descargar python

python - lenguaje - Encuentre la ruta al archivo que se está ejecutando actualmente



python tutorial (6)

El archivo en ejecución siempre es __file__ .

Aquí hay un script de demostración, llamado identify.py

print __file__

Aquí están los resultados

MacBook-5:Projects slott$ python StackOverflow/identify.py StackOverflow/identify.py MacBook-5:Projects slott$ cd StackOverflow/ MacBook-5:StackOverflow slott$ python identify.py identify.py

¿Cómo puedo encontrar la ruta completa al script en ejecución de Python? Es decir, ¿qué tengo que poner para lograr esto?

Nirvana@bahamut:/tmp$ python baz.py running from /tmp file is baz.py


El nombre del script será (¿siempre?) El primer índice de sys.argv:

import sys print sys.argv[0]

Una forma aún más fácil de encontrar la ruta de su script en ejecución:

os.path.basename(sys.argv[0])


Esto imprimirá el directorio en el que vive el script (a diferencia del directorio de trabajo):

import os dirname, filename = os.path.split(os.path.abspath(__file__)) print "running from", dirname print "file is", filename

Así es como se comporta, cuando lo puse en c:/src :

> cd c:/src > python so-where.py running from C:/src file is so-where.py > cd c:/ > python src/so-where.py running from C:/src file is so-where.py


Yo sugeriría

import os, sys print os.path.split(os.path.abspath(os.path.realpath(sys.argv[0])))[0]

De esta forma, puede crear de forma segura enlaces simbólicos al script ejecutable y aún encontrará el directorio correcto.


__file__ NO es lo que estás buscando. No use efectos secundarios accidentales

sys.argv[0] es siempre la ruta de acceso al script (si en realidad se ha invocado un script) - consulte http://docs.python.org/library/sys.html#sys.argv

__file__ es la ruta del archivo actualmente en ejecución (script o módulo). ¡Esto es accidentalmente el mismo script si se accede desde el script! Si desea poner cosas útiles como ubicar los archivos de recursos relativos a la ubicación del script en una biblioteca, entonces debe usar sys.argv[0] .

Ejemplo:

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''


import sys, os file = sys.argv[0] pathname = os.path.dirname(file) print ''running from %s'' % os.path.abspath(pathname) print ''file is %s'' % file

Compruebe os.getcwd () ( docs )