Différence entre les os.la fonction getenv et les os.environ.obtenez de l'
Est là toute la 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 les mêmes fonctionnalités.
Vous devez vous connecter pour publier un commentaire.
Une différence observée (Python27):
os.environ
lève une exception si la variable d'environnement n'existe pas.os.getenv
ne soulève pas une exception, mais ne renvoie Aucunos.environ.get()
qui renvoieNone
(sauf si spécifié différemment) et de ne jamais soulève une exception, si l'env. var. n'existe pas. Votre confusion choses avec l'aide deos.environ['TERM']
qui n'est pas ce que la question est à propos.os.environ.get()
vsos.getenv()
mais le corps comprend égalementos.environ
vsos.environ.get()
donc cette réponse correcte dans au moins certains des moyens - incomplète, mais correct.Voir ce sujet. Fondamentalement,
os.environ
est trouvé lors de l'importation, etos.getenv
est un wrapper pouros.environ.get
, au moins dans Disponible.EDIT: Pour répondre à un commentaire, en Disponible,
os.getenv
est en fait un raccourci pouros.environ.get
; depuisos.environ
est chargé à l'importation deos
, et alors seulement, la situation est la même pouros.getenv
.os.getenv()
[...] c'est quand vous voulez avoir une valeur par défaut retournée lorsqu'un nom de variable d'environnement n'est pas trouvé dansos.environ
les clés plutôt que d'avoir unKeyError
ou quel que soit levée, et que vous voulez économiser quelques caractères."En Python 2.7 avec iPython:
Nous pouvons donc conclure
os.getenv
est juste un simple wrapper autour deos.environ.get
.Alors qu'il n'y a pas de différence fonctionnelle entre
os.environ.get
etos.getenv
, il y a un massive différence entreos.putenv
et réglage des entrées suros.environ
.os.putenv
est cassé, de sorte que vous devrait à défautos.environ.get
d'éviter tout simplement la façon dontos.getenv
vous encourage à utiliseros.putenv
pour la symétrie.os.putenv
changements réels au niveau OS variables d'environnement, mais dans un sens qui ne se présentent pas à traversos.getenv
,os.environ
, ou de toute autre stdlib façon de l'inspection des variables d'environnement:Vous auriez probablement faire un ctypes appel à la C-niveau
getenv
pour voir les variables d'environnement après l'appel deos.putenv
. (Lancement d'un shell sous-processus et de lui demander pour ses variables d'environnement pourrait fonctionner aussi, si vous êtes très prudent au sujet de l'évasion et de l'--norc
/--noprofile
/tout ce que vous devez faire pour éviter de configuration de démarrage, mais il semble beaucoup plus difficile d'obtenir le droit.)Outre les réponses ci-dessus:
os.getenv
est juste un wrapper pouros.environ.get
, alors je suis très peu de frais généraux.usec
est un microseconde danstimeit
. La différence constatée dans cette micro-analyse comparative a été de 0,18 microsecondes...