installed instalar python windows environment-variables freebsd

python - instalar - ¿Cuándo os.environ[''foo''] no coincidirá con os.getenv(''foo'')?



python set environment variables windows (1)

os.environ se crea al importar el módulo os , y no refleja los cambios en el entorno que ocurren después a menos que se modifique directamente. Curiosamente, sin embargo, os.getenv() realidad tampoco recibe las variables de entorno más recientes, al menos no en CPython. Verá, en CPython, os.getenv() aparentemente es solo un contenedor alrededor de os.environ.get() (vea http://hg.python.org/cpython/file/6671c5039e15/Lib/os.py#l646 ) . Así que parece que la razón principal para usar os.getenv() con la implementación indicada es cuando desea que se devuelva un valor predeterminado cuando no se encuentra un nombre de variable de entorno en las claves de os.environ en lugar de tener un KeyError o lo que sea Tirado, y desea guardar algunos caracteres.

Es completamente posible que la implementación en FreeBSD tenga algún truco extraño que haga que actúe de manera diferente, pero no estoy seguro de por qué ese sería el caso. Eche un vistazo a la copia de os.py en una de las máquinas FreeBSD que usa, si puede.

Tengo una pequeña aplicación de Python, iniciada a través de subprocess.Popen , que toma algunos parámetros en forma de variables de entorno. Lo hago pasando la estructura del entorno a la llamada de Popen . El programa luego lee las variables a través de os.getenv .

O más bien, solía leerlos de esa manera. En Windows, funcionó bien. Pero en nuestros servidores FreeBSD, os.getenv devuelve None para todos los parámetros que pasamos. La parte extraña es que os.environ tiene los valores simplemente finos y, de hecho, simplemente conmuta todas las os.getenv(''foo'') a os.environ[''foo''] hizo que todo funcionara bien en ambas plataformas.

¿Por qué estos valores son diferentes? ¿Cuándo es apropiado uno sobre el otro?