¿Cómo puedo hacer que mi programa tenga un directorio de trabajo actual inicial consistente? [duplicate]

2 minutos de lectura

Avatar de usuario de Shriram
Shriram

Cuando ejecuto el siguiente script en IDLE

import os
print(os.getcwd())

obtengo salida como

D:\testtool

pero cuando ejecuto desde cmd prompt, obtengo

c:\Python33>python D:\testtool\current_dir.py
c:\Python33

¿Cómo obtengo el mismo resultado que obtuve usando IDLE?

  • Esta pregunta se basa en una premisa equivocada; os.getcwd() es, de hecho, cómo se obtiene el directorio de trabajo actual. El problema es ese la forma en que ejecuta el script cambia cuál es el directorio de trabajo actual.

    – Karl Knechtel

    15 de marzo a las 7:37

  • En otras palabras: la respuesta directa a la pregunta es “no por nada en el código de Python, sino por usando comandos de terminal para moverse a D:\testtooly luego corriendo python current_dir.py“.

    – Karl Knechtel

    15 de marzo a las 7:54

Avatar de usuario de Maciek
Maciek

Parece que IDLE cambia su directorio de trabajo actual a la ubicación del script que se ejecuta, mientras que cuando ejecuta el script usando cmd no hace eso y deja CWD como está.

Para cambiar el directorio de trabajo actual al que contiene su script, puede usar:

import os
os.chdir(os.path.dirname(__file__))
print(os.getcwd())

El __file__ La variable está disponible solo si ejecuta el script desde el archivo y contiene la ruta al archivo. Más sobre esto aquí: Python __file__ atributo absoluto o relativo?

  • Recomendaría no cambiar el directorio, ya que podría obtener resultados no deterministas si el usuario esperaba ejecutar el script desde un directorio diferente.

    – Federico Ollinger

    2 de septiembre de 2021 a las 5:05

  • Estoy de acuerdo con @FrederickOllinger, no es necesario cambiar de directorio. os.path.dirname(__file__) es suficiente.

    –Ashley Kleynhans

    5 de julio de 2022 a las 13:50

avatar de usuario de butsyk
butsyk

Usando pathlib puede obtener la carpeta en la que se encuentra el archivo actual. __file__ es el nombre de ruta del archivo desde el que se cargó el módulo. Árbitro: documentos

import pathlib

current_dir = pathlib.Path(__file__).parent
current_file = pathlib.Path(__file__)

Referencia del documento: enlace

  • ¿No pueden ser diferentes la ubicación del archivo actual y el directorio de trabajo actual?

    – Stevoisiak

    24 de junio de 2019 a las 16:38

  • Sí, ¿puede cambiar el directorio de trabajo actual, cwd, con os.chdir (ruta). Cambie el directorio de trabajo actual a la ruta. docs.python.org/3/library/os.html#os-file-dir

    – Federico Ollinger

    13 de agosto de 2022 a las 16:59

predeterminado de Python pathlib biblioteca proporciona el cwd así:

import pathlib

pathlib.Path.cwd()

  • Genial, estoy buscando la biblioteca pathlib

    – muchotarsp

    7 de junio de 2021 a las 9:04

¿Ha sido útil esta solución?