¿Cómo puedo encontrar el directorio del script con Python?

Considere el siguiente código de Python:

import os print os.getcwd() 

Utilizo os.getcwd() para obtener la ubicación del directorio del archivo de script . Cuando ejecuto el script desde la línea de comandos, me da la ruta correcta, mientras que cuando lo ejecuto desde un script ejecutado por código en una vista de Django se imprime / .

¿Cómo puedo obtener la ruta al script desde un script ejecutado por una vista Django?

ACTUALIZAR:
Resumiendo las respuestas hasta ahora – os.getcwd() y os.path.abspath() proporcionan el directorio de trabajo actual que puede o no ser el directorio donde reside el script. En la configuración de mi servidor web, __file__ solo da el nombre de archivo sin la ruta.

¿No hay ninguna manera en Python para (siempre) poder recibir la ruta en la que reside el script?

    __file__ llamar a os.path.realpath en __file__ , de modo que cuando __file__ sea ​​un nombre de archivo sin la ruta, todavía obtenga la ruta dir:

     import os print(os.path.dirname(os.path.realpath(__file__))) 

    Pruebe sys.path[0] .

    Para citar de los documentos de Python:

    Como se inicializó al iniciar el progtwig, el primer elemento de esta lista, path[0] , es el directorio que contiene el script que se usó para invocar al intérprete de Python. Si el directorio del script no está disponible (por ejemplo, si el intérprete se invoca interactivamente o si el script se lee desde la entrada estándar), la path[0] es la cadena vacía, que dirige a Python a buscar módulos en el directorio actual primero. Observe que el directorio de secuencias de comandos se inserta antes de las entradas insertadas como resultado de PYTHONPATH .

    Fuente: https://docs.python.org/library/sys.html#sys.path

    Yo suelo:

     import os import sys def get_script_path(): return os.path.dirname(os.path.realpath(sys.argv[0])) 

    Como lo señala aiham en un comentario, puede definir esta función en un módulo y usarla en diferentes scripts.

    Este código:

     import os dn = os.path.dirname(os.path.realpath(__file__)) 

    establece “dn” al nombre del directorio que contiene el script que se está ejecutando actualmente. Este código:

     fn = os.path.join(dn,"vcb.init") fp = open(fn,"r") 

    establece “fn” en “script_dir / vcb.init” (de manera independiente de la plataforma) y abre ese archivo para que lo lea el script que se está ejecutando actualmente.

    Tenga en cuenta que “el script que se está ejecutando actualmente” es un tanto ambiguo. Si su progtwig completo consta de 1 script, entonces ese es el script que se está ejecutando actualmente y la solución “sys.path [0]” funciona bien. Pero si su aplicación consiste en el script A, que importa algún paquete “P” y luego llama al script “B”, entonces se está ejecutando “PB”. Si necesita obtener el directorio que contiene “PB”, desea la solución ” os.path.realpath(__file__) “.

    __file__ ” solo da el nombre de la secuencia de comandos que se ejecuta actualmente (parte superior de la stack): “x.py”. No da ninguna información de ruta. Es la llamada “os.path.realpath” que hace el trabajo real.

     import os,sys # Store current working directory pwd = os.path.dirname(__file__) # Append current directory to the python path sys.path.append(pwd) 
     import os script_dir = os.path.dirname(os.path.realpath(__file__)) + os.sep 

    Esto funcionó para mí (y lo encontré a través de esta pregunta de stackoverflow )

     os.path.realpath(__file__) 

    Utilice os.path.abspath('')

    Esto es lo que terminé con. Esto me funciona si importo mi script en el intérprete, y también si lo ejecuto como un script:

     import os import sys # Returns the directory the current script (or interpreter) is running in def get_script_directory(): path = os.path.realpath(sys.argv[0]) if os.path.isdir(path): return path else: return os.path.dirname(path) 

    Este es un hilo bastante antiguo, pero he tenido este problema al intentar guardar archivos en el directorio actual en el que se encuentra la secuencia de comandos al ejecutar una secuencia de comandos de Python desde un trabajo cron. getcwd () y gran parte de la otra ruta aparece con su directorio de inicio.

    para obtener una ruta absoluta al script que utilicé

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

    Prueba esto:

     def get_script_path(for_file = None): path = os.path.dirname(os.path.realpath(sys.argv[0] or 'something')) return path if not for_file else os.path.join(path, for_file) 
     import os exec_filepath = os.path.realpath(__file__) exec_dirpath = exec_filepath[0:len(exec_filepath)-len(os.path.basename(__file__))]