Y a-t-il une différence entre les deux approches?
>>> 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
Ils semblent avoir exactement la même fonctionnalité.
python
environment-variables
python-os
André Staltz
la source
la source
os.environ.get()
quels retoursNone
(sauf indication contraire) et ne lève jamais d'exception si env. var. n'existe pas. Vos choses déroutantes avec l'utilisationos.environ['TERM']
qui n'est pas l'objet de la question.os.environ.get()
vsos.getenv()
mais le corps inclut égalementos.environ
vsos.environ.get()
donc cette réponse est correcte au moins à certains égards - incomplète, mais correcte.Voir ce fil associé . Fondamentalement,
os.environ
se trouve lors de l'importation etos.getenv
est un wrapper pouros.environ.get
, au moins en CPython.EDIT: Pour répondre à un commentaire, en CPython,
os.getenv
est essentiellement un raccourci versos.environ.get
; puisqueos.environ
est chargé à l'importation deos
, et alors seulement, il en va de même pouros.getenv
.la source
os.getenv()
[...] est lorsque vous voulez avoir une valeur par défaut renvoyée quand un nom de variable d'environnement n'est pas trouvé dansos.environ
les clés de plutôt que d'avoir unKeyError
ou quoi que ce soit, et vous voulez enregistrer quelques caractères. "En Python 2.7 avec iPython:
Nous pouvons donc conclure qu'il ne
os.getenv
s'agit que d'un simple wrapperos.environ.get
.la source
Bien qu'il n'y ait pas de différence fonctionnelle entre
os.environ.get
etos.getenv
, il existe une énorme différence entreos.putenv
et définir les entrées suros.environ
.os.putenv
est cassé , vous devriez donc utiliser par défautos.environ.get
simplement pour éviter que la manièreos.getenv
vous encourage à utiliseros.putenv
pour la symétrie.os.putenv
modifie les variables d'environnement OS-niveau réel, mais d'une manière qui ne se présente pas à traversos.getenv
,os.environ
ou de toute autre manière stdlib d'inspecter les variables d'environnement:Vous devrez probablement faire un appel ctypes au niveau C
getenv
pour voir les variables d'environnement réelles après l'appelos.putenv
. (Lancer un sous-processus shell et lui demander ses variables d'environnement peut également fonctionner, si vous faites très attention à l'échappement et--norc
/--noprofile
/ à tout ce que vous devez faire pour éviter la configuration de démarrage, mais cela semble beaucoup plus difficile à faire.)la source
En plus des réponses ci-dessus:
la source
os.getenv
c'est juste un wrapper pouros.environ.get
, donc je reçois une surcharge très minime.usec
est une microseconde danstimeit
. La différence trouvée dans ce micro-benchmarking était de 0,18 microsecondes ...