Toegang tot omgevingsvariabelen in Python

  1. Omgevingsvariabelen
  2. Omgevingsvariabelen in Python
  3. Leesomgevingsvariabelen
  4. Schrijfomgevingvariabelen

Omgevingsvariabelen

Omgevingsvariabelen zijn variabelen waaraan extern waarden worden toegewezen aan het Python-programma. Ontwikkelaars zetten deze meestal op de opdrachtregel voordat het uitvoerbare Python wordt aangeroepen. Het besturingssysteem maakt deze variabelen vervolgens van binnenuit toegankelijk voor een Python-programma.

Speelkeuze podcast met Maarten Wolz...
Speelkeuze podcast met Maarten Wolzak van Myndr over internet filteren

Er bestaan ​​omgevingsvariabelen voor programmaflexibiliteit. Op deze manier kan een gebruiker specifieke parameters wijzigen voordat het programma wordt uitgevoerd en kan het programma deze parameters bekijken en zijn gedrag dynamisch wijzigen. Er is geen codewijziging vereist en een dergelijk gebruik van omgevingsvariabelen wordt programmaconfiguratie genoemd.

Omgevingsvariabelen in Python

Het mechanisme voor het instellen van omgevingsvariabelen is platformafhankelijk. Om die reden worden ze beschikbaar gesteld via de ingebouwde os module van Python , die besturingssysteemafhankelijke functionaliteit abstraheert.

Python runtime bewaart alle omgevingsvariabelen van het programma in een woordenboekachtig os.environ object.

Merk op dat het os.environ object wordt ingevuld wanneer de Python-runtime de os module laadt . Als u achteraf omgevingsvariabelen probeert te wijzigen (bijvoorbeeld door een nieuwe omgevingsvariabele in de terminalemulator te exporteren), werkt deze niet.

Leesomgevingsvariabelen

Toegang krijgen tot omgevingsvariabelen in Python wordt gedaan door woordenboekachtige bewerkingen op een os.environ object uit te voeren.

>>> 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'

Als u met behulp van een subscriptnotatie toegang krijgt tot een omgevingsvariabele [] en die variabele is niet gedefinieerd, krijgt u een runtime-fout.

>>> 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'

Om dit probleem te voorkomen, kan je os.environ met behulp van de get() interface van het object lezen . Als een opgezochte omgevingsvariabele niet is gedefinieerd, wordt get() geretourneerd None.

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

Een handige functie van de get() interface is dat u een standaardwaarde kunt opgeven die moet worden gebruikt als een gezochte omgevingsvariabele niet bestaat.

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

Een alternatief voor os.environ.get() is de gebruiksfunctie os.getenv(). Beide functies werken hetzelfde en je kan deze laatste als een gemak-API behandelen.

Schrijfomgevingvariabelen

Soms moet u een omgevingsvariabele vanuit uw programma wijzigen. Het kan bijvoorbeeld gebeuren als u het gedrag van uw toepassing moet wijzigen bij ontvangst van een configuratienetwerkverzoek. U wijzigt omgevingsvariabelen met de subscript- [] operator alsof os.environ het een standaardwoordenboek is geweest.

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

Merk op dat de waarden van de omgevingsvariabele van het stringtype moeten zijn. Als u probeert een geheel getal of een andere niet-stringwaarde toe te wijzen aan een omgevingsvariabele, krijgt u een runtime-fout.

>>> 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