Tengo una pequeña aplicación de Python, lanzada a través de subprocess.Popen
, que toma algunos parámetros en forma de variables de entorno. Lo hago pasando la estructura de entorno a la llamada Popen
. El programa luego lee las variables a través de os.getenv
.¿Cuándo os.environ ['foo'] no coincide con os.getenv ('foo')?
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 se ha pasado. La parte extraña es que os.environ
tiene los valores simplemente finas — y, de hecho, simplemente cambiando todos los os.getenv('foo')
llamadas a os.environ['foo']
trabajo todo lo hizo muy bien en ambos plataformas .
¿Por qué son diferentes estos valores? ¿Cuándo es apropiado uno sobre el otro?
En Windows 10, 'os.putenv ('abc', '123')' no funcionó, es decir, la nueva variable no está configurada. Sin embargo, 'os.environ ['abc'] = '123'' funciona y, posteriormente,' os.getenv (' abc ') 'también funciona. –
@arvindpdmn Después de otro examen, eso es porque 'putenv()' en realidad no almacena la variable de entorno en 'os.environ'; más bien, 'environ .__ setitem __()' llama a 'putenv()' y también almacena los datos localmente, y ni 'getenv()' ni 'environ .__ getitem __()' realmente consultan el entorno en sí, operan fuera de lo que sea 'os .environ' ha almacenado. Una forma bastante confusa de implementarlo. – JAB