Wie man in Python auf Umgebungsvariablen zugreift
- Was sind Umgebungsvariablen
- Umgebungsvariablen in Python
- Umgebungsvariablen in Python lesen
- Anhängen von Umgebungsvariablen in Python
Was sind Umgebungsvariablen
Umgebungsvariablen sind Variablen, die extern dem Python-Programm Werte zugewiesen werden. Entwickler setzen sie normalerweise auf der Kommandozeile, bevor sie das Python-Programm aufrufen. Das Betriebssystem macht diese Variablen dann einem Python-Programm von innen heraus zugänglich.
Für die Flexibilität des Programms gibt es Umgebungsvariablen. So kann ein Benutzer bestimmte Parameter vor der Programmausführung ändern und
das Programm kann diese Parameter untersuchen und sein Verhalten ändern dynamisch.
Es ist keine Änderung des Codes erforderlich, und eine solche Verwendung von Umgebungsvariablen wird als Programm-Konfiguration.
Umgebungsvariablen in Python
Der Mechanismus des Setzens von Umgebungsvariablen ist plattformabhängig. Deshalb sind sie zur Verfügung gestellt durch Python’s eingebautes os
Modul, welches durch die Abstraktion
betriebssystemabhängige Funktionalität.
Die Python-Laufzeit hält alle Umgebungsvariablen des Programms in einem Dictionaryartigen os.environ
Objekt.
Beachten Sie, dass das os.environ
Objekt aufgefüllt wird, wenn die Python-Laufzeit das os
Modul lädt. Wenn Sie versuchen, Umgebungsvariablen nachträglich zu ändern (z. B. durch Export einer neuen Umgebungsvariablen im Terminalemulator), wird es nicht funktionieren.
Umgebungsvariablen in Python lesen
Der Zugriff auf die Umgebungsvariablen in Python erfolgt in Python durch Dictionaryähnliche Operationen auf dem os.environment
-Objekt.
>>> 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'
Wenn Sie auf eine Umgebungsvariable mit einer []
Subskript-Notation zugreifen und diese Variable undefiniert ist, erhalten Sie einen Laufzeitfehler.
>>> 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'
Um dieses Problem zu vermeiden, können Sie mit Hilfe des get()
Interfaces aus dem os.environ
Objekt lesen. Wenn eine nachgeschlagene Umgebungsvariable nicht definiert wurde, gibt get()
None
zurück.
>>> result = os.environ.get('I_DONT_EXIST')
>>> print(result)
None
Eine Komfortfunktion des get()
Interfaces ist, dass Sie einen Standardwert angeben können, der verwendet werden soll für den Fall, dass eine gesuchte Umgebungsvariable nicht existiert.
>>> os.environ.get('I_DONT_EXIST', 'I_AM_DEFAULT')
'I AM DEFAULT'
Eine Alternative zu os.environ.get()
ist die Verwendung der os.getenv()
Funktion. Beide Funktionen arbeiten gleich, und Sie können letztere als eine Komfort-API behandeln.
Anhängen von Umgebungsvariablen in Python
Manchmal müssen Sie eine Umgebungsvariable aus Ihrem Programm heraus ändern oder anhängen. Das kann zum Beispiel passieren, wenn Sie das Verhalten Ihrer Anwendung nach dem Empfang einer Netzwerk-Konfigurationsanforderung ändern müssen. Sie ändern die Umgebungsvariablen mit dem Subscript-Operator []
, als ob os.environ
ein StandardDictionary gewesen wäre.
>>> import os
>>> os.environ['LANG']
'en_US.UTF-8'
>>> os.environ['LANG'] = 'en_GB.UTF-8'
>>> os.environ['LANG']
'en_GB.UTF-8'
Beachten Sie, dass die Werte der Umgebungsvariablen vom Typ String sein sollten. Wenn Sie versuchen, einer Umgebungsvariablen einen Integer- oder einen anderen nicht-String-Wert zuzuweisen, können Sie wird einen Laufzeitfehler erhalten.
>>> 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