Si bien no existe una diferencia funcional entre os.environ.get
y os.getenv
, existe una gran diferencia entre os.putenv
y establecer entradas en os.environ
. os.putenv
está roto , por lo que debe usar os.environ.get
simplemente para evitar la forma en que lo os.getenv
alienta a usar os.putenv
para la simetría.
os.putenv
cambia las variables de entorno del sistema operativo de nivel, pero de una manera que no se presenta a través de os.getenv
, os.environ
o de cualquier otra manera stdlib de inspeccionar las variables de entorno:
>>> import os
>>> os.environ['asdf'] = 'fdsa'
>>> os.environ['asdf']
'fdsa'
>>> os.putenv('aaaa', 'bbbb')
>>> os.getenv('aaaa')
>>> os.environ.get('aaaa')
Probablemente tendría que hacer una llamada de ctypes al nivel C getenv
para ver las variables de entorno reales después de llamar os.putenv
. (Iniciar un subproceso de shell y preguntarle por sus variables de entorno también podría funcionar, si tiene mucho cuidado con el escape y --norc
/ --noprofile
o cualquier otra cosa que necesite hacer para evitar la configuración de inicio, pero parece mucho más difícil hacerlo bien).
os.environ.get()
qué retornosNone
(a menos que se especifique lo contrario) y nunca genera una excepción si el env. var. no existe Sus cosas confusas con el usoos.environ['TERM']
que no es de lo que se trata la pregunta.