Si bien no existe una diferencia funcional entre os.environ.gety os.getenv, existe una gran diferencia entre os.putenvy establecer entradas en os.environ. os.putenvestá roto , por lo que debe usar os.environ.getsimplemente para evitar la forma en que lo os.getenvalienta a usar os.putenvpara la simetría.
os.putenvcambia las variables de entorno del sistema operativo de nivel, pero de una manera que no se presenta a través de os.getenv, os.environo 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 getenvpara 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/ --noprofileo 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.