¿Hay alguna diferencia entre ambos enfoques?
>>> os.getenv('TERM')
'xterm'
>>> os.environ.get('TERM')
'xterm'
>>> os.getenv('FOOBAR', "not found") == "not found"
True
>>> os.environ.get('FOOBAR', "not found") == "not found"
True
Parecen tener exactamente la misma funcionalidad.
                    
                        python
                                environment-variables
                                python-os
                                
                    
                    
                        André Staltz
fuente
                
                
            fuente

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.os.environ.get()vs,os.getenv()pero el cuerpo también incluyeos.environvs,os.environ.get()por lo que esta respuesta es correcta al menos en algunos aspectos: incompleta, pero correcta.Ver este hilo relacionado . Básicamente,
os.environse encuentra en la importación, yos.getenves un contenedor paraos.environ.get, al menos en CPython.EDITAR: Para responder a un comentario, en CPython,
os.getenves básicamente un acceso directo aos.environ.get; ya queos.environse carga en la importación deos, y solo entonces, lo mismo vale paraos.getenv.fuente
os.getenv()[...] es cuando desea que se devuelva un valor predeterminado cuando no se encuentra un nombre de variable de entorno enos.environlas claves de las teclas en lugar de tener unKeyErroro lo que sea lanzado, y usted querer guardar algunos caracteres ".En Python 2.7 con iPython:
Por lo tanto, podemos concluir que
os.getenves solo una simple envolturaos.environ.get.fuente
Si bien no existe una diferencia funcional entre
os.environ.getyos.getenv, existe una gran diferencia entreos.putenvy establecer entradas enos.environ.os.putenvestá roto , por lo que debe usaros.environ.getsimplemente para evitar la forma en que loos.getenvalienta a usaros.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 deos.getenv,os.environo de cualquier otra manera stdlib de inspeccionar las variables de entorno:Probablemente tendría que hacer una llamada de ctypes al nivel C
getenvpara ver las variables de entorno reales después de llamaros.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).fuente
Además de las respuestas anteriores:
fuente
os.getenves solo un contenedor paraos.environ.get, por lo que obtengo una sobrecarga muy mínima.useces un microsegundo entimeit. La diferencia encontrada en este micro-benchmarking fue de 0.18 microsegundos ...