Python >> Tutoriel Python >  >> Python

Accéder aux variables d'environnement en Python

Que sont les variables d'environnement

Les variables d'environnement sont des variables auxquelles des valeurs sont affectées en externe au programme Python. Les développeurs les définissent généralement sur la ligne de commande avant d'appeler l'exécutable Python. Le système d'exploitation rend ensuite ces variables accessibles à un programme Python depuis l'intérieur.

Des variables d'environnement existent pour la flexibilité du programme. De cette façon, un utilisateur peut modifier des paramètres spécifiques avant l'exécution du programme, et le programme pourra vérifier ces paramètres et modifier son comportement dynamiquement.

Aucune modification de code n'est requise, et une telle utilisation de variables d'environnement est appelée configuration de programme.

Variables d'environnement en Python - os.environ

Le mécanisme de définition des variables d'environnement dépend de la plate-forme. Pour cette raison, ils sont rendus disponibles via le os intégré de Python module, qui fait abstraction des fonctionnalités dépendantes du système d'exploitation.

L'environnement d'exécution Python conserve toutes les variables d'environnement du programme dans un os.environ semblable à un dictionnaire objet.

Apprendre Python :Tutoriel Python pour débutants 2022 | Module 1 [Fonctions, Variables, Nombres, Chaîne ]

Notez que le os.environ l'objet est rempli lorsque le runtime Python charge le os module. Si vous essayez de modifier les variables d'environnement après coup (par exemple, en exportant une nouvelle variable d'environnement dans l'émulateur de terminal), cela ne fonctionnera pas.

Lire les variables d'environnement en Python

L'accès aux variables d'environnement en Python se fait en effectuant des opérations de type dictionnaire sur le os.environ objet.

>>> import os
>>> os.environ
environ({'HOME': '/Users/john', 'LANG': 'en_US.UTF-8', 'LOGNAME': 'john', 'OLDPWD': '/Users/john', 'PATH': '/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin', 'PWD': '/Users/john/python-tutorial', 'SHELL': '/bin/zsh', 'TERM': 'screen', 'TERM_PROGRAM': 'Apple_Terminal', 'TERM_PROGRAM_VERSION': '433', 'TERM_SESSION_ID': 'CDC91EF3-15D6-41AD-A17B-E959D97BC4B5', 'TMPDIR': '/var/folders/md/31nwv67j113d19z0_1287f1r0000gn/T/', 'TMUX': '/private/tmp/tmux-501/default,3319,0', 'TMUX_PANE': '%28' , 'USER': 'john', '_': '/usr/local/bin/python3', '__PYVENV_LAUNCHER__': '/usr/local/bin/python3'})
>>> os.environ['HOME']
'/Users/john'
>>> os.environ['LANG']
'en_US.UTF-8'

Si vous obtenez une variable d'environnement en Python en utilisant un indice [] notation, et que cette variable n'est pas définie, vous obtiendrez une erreur d'exécution.

>>> os.environ['I_DONT_EXIST']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 679, in __getitem__
    raise KeyError(key) from None
KeyError: 'I_DONT_EXIST'

Pour éviter ce problème, vous pouvez lire la variable d'environnement à partir du os.environ objet utilisant le get() interface. Si une variable d'environnement recherchée n'a pas été définie, get() renvoie None .

>>> result = os.environ.get('I_DONT_EXIST')
>>> print(result)
None

Une fonction pratique du get() est que vous pouvez spécifier une valeur par défaut à utiliser si une variable d'environnement recherchée n'existe pas.

>>> os.environ.get('I_DONT_EXIST', 'I_AM_DEFAULT')
'I AM DEFAULT'

Une alternative à os.environ.get() est d'utiliser Python os.getenv() méthode. Les deux fonctions fonctionnent de la même manière et vous pouvez traiter cette dernière comme une API pratique.

Ajouter des variables d'environnement en Python

Parfois, vous devez modifier ou ajouter une variable d'environnement depuis votre programme. Par exemple, cela peut arriver si vous devez modifier le comportement de votre application lors de la réception d'une demande de configuration réseau. Vous modifiez les variables d'environnement en utilisant l'indice [] opérateur comme si os.environ a été un dictionnaire standard.

>>> import os
>>> os.environ['LANG']
'en_US.UTF-8'
>>> os.environ['LANG'] = 'en_GB.UTF-8'
>>> os.environ['LANG']
'en_GB.UTF-8'

Notez que les valeurs des variables d'environnement doivent être de type chaîne. Si vous essayez d'attribuer un entier ou toute autre valeur non-chaîne à une variable d'environnement, vous obtiendrez une erreur d'exécution.

>>> import os
>>> os.environ['LANG'] = 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 684, in __setitem__
    value = self.encodevalue(value)
  File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/os.py", line 754, in encode
    raise TypeError("str expected, not %s" % type(value).__name__)
TypeError: str expected, not int