Cómo obtener la ruta de acceso de la secuencia de comandos congelada de ejecución
Si está ejecutando un script de Python congelado (congelado usando py2exe) desde un directorio y una unidad diferente de donde está presente el script, ¿cuál es la mejor manera de determinar la ruta del script de ejecución?
Pocas soluciones he probado
<code>inspect.getfile(inspect.currentframe()) </code>
Problema: No devuelve el camino completo. Solo devuelve el nombre del script.
<code>os.path.abspath( __file__ ) </code>
Problema: no funciona en Windows
<code>os.path.dirname(sys.argv[0]) </code>
Problema: Devuelve una cadena vacía.
<code>os.path.abspath(inspect.getsourcefile(way3)) </code>
No funcionará si la unidad es diferente de la pwd
<code>os.path.dirname(os.path.realpath(sys.argv[0])) </code>
No funcionará si la unidad es diferente de la pwd
Aquí hay un ejemplo mínimo que no funciona.
<code>D:\>path PATH=c:\Python27\;c:\Users\abhibhat\Desktop\ToBeRemoved\spam\dist\;c:\gnuwin32\bin D:\>cat c:\Users\abhibhat\Desktop\ToBeRemoved\spam\eggs.py import os, inspect, sys def way1(): return os.path.dirname(sys.argv[0]) def way2(): return inspect.getfile(inspect.currentframe()) def way3(): return os.path.dirname(os.path.realpath(sys.argv[0])) def way4(): try: return os.path.abspath( __file__ ) except NameError: return "Not Found" def way5(): return os.path.abspath(inspect.getsourcefile(way3)) if __name__ == '__main__': print "Path to this script is",way1() print "Path to this script is",way2() print "Path to this script is",way3() print "Path to this script is",way4() print "Path to this script is",way5() D:\>eggs Path to this script is Path to this script is eggs.py Path to this script is D:\ Path to this script is Not Found </code>
Preguntas relacionadas:
¿Cómo saber la ruta del script en ejecución en Python?¿Cómo obtengo la ruta y el nombre del archivo que se está ejecutando actualmente?python, ruta de acceso del script [cerrado]Nota
La solución de @ Fenikso funcionará si la secuencia de comandos reside en la misma unidad en la que está ejecutando, pero cuando está en una unidad diferente, no funcionará