Wie man in Python auf Umgebungsvariablen zugreift

  1. Was sind Umgebungsvariablen
  2. Umgebungsvariablen in Python
  3. Umgebungsvariablen in Python lesen
  4. 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 wörterbuchartigen 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 wörterbuchä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 Standardwörterbuch 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
comments powered by Disqus