Kupata, kuongeza, kuandika, na kufuta anuwai ya mazingira katika Python (os. Environ)

Biashara

Vigeugeu vya mazingira vinaweza kupatikana, kukaguliwa, kuweka (kuongezwa au kuandikwa tena), na kufutwa katika programu za Python kutumia os.environ. Kumbuka kuwa mabadiliko yaliyofanywa kwa kuweka au kufuta anuwai ya mazingira yanafaa tu ndani ya programu ya Python. Haimaanishi kuwa anuwai ya mazingira ya mfumo itaandikwa tena.

Habari zifuatazo zimetolewa hapa.

  • os.environ
  • Pata mabadiliko ya mazingira.
  • Weka (ongeza / ongeza) anuwai ya mazingira
  • Ondoa mabadiliko ya mazingira
  • Athari za kubadilisha mabadiliko ya mazingira
  • Kubadilisha michakato na anuwai ya mazingira

Ingiza na utumie moduli ya os. Kwa kuwa ni maktaba ya kawaida, hakuna usanikishaji wa ziada unahitajika. Moduli ya mchakato pia imejumuishwa kwenye maktaba ya kawaida.

import os
import subprocess

mazingira

Aina ya os. Environ ni os._Environ.

print(type(os.environ))
# <class 'os._Environ'>

os._Environ ni kitu cha aina ya ramani na jozi ya ufunguo na thamani, na ina njia sawa na kamusi (aina ya dict). Jina la kutofautisha kwa mazingira ni muhimu, na thamani yake ni thamani.

Yaliyomo ya os.environ yatapakiwa wakati moduli ya os itaingizwa. Yaliyomo ya os.environ hayatasasishwa hata kama mabadiliko ya mazingira ya mfumo hubadilishwa kwa njia zingine wakati programu inaendelea.

Orodha hiyo inaonyeshwa kwa kuchapisha ().

# print(os.environ)

Kama ilivyo na kamusi, unaweza kutumia njia zifuatazo, au tumia kuangalia kuwapo kwa funguo na maadili.

  • keys()
  • values()

Usindikaji wa funguo na maadili kimsingi ni sawa na kwa kamusi. Mifano imepewa hapa chini.

Pata mabadiliko ya mazingira.

os.environ[Environment variable name]
Hii itakuruhusu kupata thamani ya ubadilishaji wa mazingira, lakini ukitaja jina la kutofautisha kwa mazingira ambalo halipo, utapata kosa (KeyError).

print(os.environ['LANG'])
# ja_JP.UTF-8

# print(os.environ['NEW_KEY'])
# KeyError: 'NEW_KEY'

Njia ya kupata () ya os.environ inaweza kutumika kupata thamani ya msingi ikiwa haipo. Hii pia ni sawa na kamusi.

print(os.environ.get('LANG'))
# ja_JP.UTF-8

print(os.environ.get('NEW_KEY'))
# None

print(os.environ.get('NEW_KEY', 'default'))
# default

Kazi os.getenv () pia hutolewa. Kama njia ya kupata () ya kamusi, inarudisha dhamana chaguomsingi ikiwa ufunguo haupo. Kazi hii ni muhimu ikiwa unataka tu kuangalia na kuangalia thamani ya utofauti wa mazingira.

print(os.getenv('LANG'))
# ja_JP.UTF-8

print(os.getenv('NEW_KEY'))
# None

print(os.getenv('NEW_KEY', 'default'))
# default

Weka (ongeza / ongeza) anuwai ya mazingira

os.environ[Environment variable name]
Kwa kupeana thamani kwa hii, unaweza kuweka kutofautisha kwa mazingira.

Wakati jina jipya la mazingira linapotajwa, ubadilishaji wa mazingira huongezwa hivi karibuni, na wakati jina la kutofautisha la mazingira linapotajwa, thamani ya utofauti wa mazingira huandikwa tena.

os.environ['NEW_KEY'] = 'test'

print(os.environ['NEW_KEY'])
# test

os.environ['NEW_KEY'] = 'test2'

print(os.environ['NEW_KEY'])
# test2

Kumbuka kuwa kupeana chochote isipokuwa kamba kutasababisha kosa (TypeError). Ikiwa unataka kupeana nambari ya nambari, taja kama kamba.

# os.environ['NEW_KEY'] = 100
# TypeError: str expected, not int

os.environ['NEW_KEY'] = '100'

Kazi os.putenv () pia hutolewa. Walakini, thamani ya os.environ haijasasishwa wakati imewekwa na os.putenv (). Kwa sababu hii, ni vyema kutaja ufunguo (jina la kutofautisha mazingira) ya os.environ na kupeana thamani kama inavyoonyeshwa kwenye mfano hapo juu.

Ikiwa putenv () inasaidiwa, mgawo wa kipengee katika os.environ itabadilishwa kiatomati kuwa simu inayoendana na putenv (). Katika mazoezi, kukabidhi kitu katika os.environ ni operesheni inayopendelewa, kwani simu ya moja kwa moja kwa putenv () haitasasisha os.environ.
os.putenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Kama ilivyosemwa hapo awali, mabadiliko yaliyofanywa kwa kuongeza au kuweka alama juu ya anuwai ya mazingira yanafaa tu ndani ya programu ya Python. Haimaanishi kuwa anuwai ya mazingira ya mfumo itaandikwa tena.

Kumbuka kuwa kubadilisha thamani kunaweza kusababisha kuvuja kwa kumbukumbu kulingana na OS.

Kumbuka: Kwenye majukwaa mengine, pamoja na FreeBSD na Mac OS X, kubadilisha thamani ya mazingira kunaweza kusababisha kuvuja kwa kumbukumbu.
os.putenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Hii ni kwa sababu ya maelezo ya putenv () ya OS yenyewe.

Successive calls to setenv() or putenv() assigning a differently sized value to the same name will result in a memory leak. The FreeBSD seman-tics semantics for these functions (namely, that the contents of value are copied and that old values remain accessible indefinitely) make this bug unavoidable.
Mac OS X Manual Page For putenv(3)

Ondoa mabadiliko ya mazingira

Ili kufuta utofauti wa mazingira, tumia njia ya pop () ya os. Environ au taarifa ya del. Sawa na kamusi.

Ifuatayo ni mfano wa pop ().

pop () inarudi thamani ya utofauti wa mazingira ambayo ilifutwa. Kwa chaguo-msingi, kutaja kutofautisha kwa mazingira ambayo haipo kutasababisha hitilafu (KeyError), lakini ikitaja hoja ya pili itarudisha thamani ya ubadilishaji wa mazingira ikiwa haipo.

print(os.environ.pop('NEW_KEY'))
# 100

# print(os.environ.pop('NEW_KEY'))
# KeyError: 'NEW_KEY'

print(os.environ.pop('NEW_KEY', None))
# None

Ifuatayo ni mfano wa del.

Tofauti ya mazingira imeongezwa tena, na kisha kufutwa. Ikiwa ubadilishaji wa mazingira haupo, kosa (KeyError).

os.environ['NEW_KEY'] = '100'

print(os.getenv('NEW_KEY'))
# 100

del os.environ['NEW_KEY']

print(os.getenv('NEW_KEY'))
# None

# del os.environ['NEW_KEY']
# KeyError: 'NEW_KEY'

Kazi os.unsetenv () pia hutolewa. Walakini, kama ilivyo na os.putenv (), thamani ya os.environ haijasasishwa inapofutwa na os.unsetenv (). Kwa hivyo, ni vyema kutaja ufunguo (jina la kutofautisha mazingira) ya os. Environ na uifute kama inavyoonyeshwa kwenye mfano hapo juu.

Ikiwa unsetenv () inasaidiwa, kufuta kipengee katika os.environ kitatafsiri kiatomati kwa simu inayoendana na unsetenv (). Kwa mazoezi, kufuta vitu kwenye os.environ ndio operesheni inayopendelewa, kwani simu za moja kwa moja kwa unsetenv () hazitasasisha os.environ.
os.unsetenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Kufuta anuwai ya mazingira pia kunafaa tu ndani ya programu hiyo ya Python. Haiondoi mabadiliko ya mazingira ya mfumo.

Athari za kubadilisha mabadiliko ya mazingira

Kama nilivyoandika mara kwa mara, kubadilisha (kuweka au kufuta) mabadiliko ya mazingira ya os.environ hayabadilishi mazingira ya mfumo, lakini inaathiri michakato ndogo ambayo imezinduliwa katika programu.

Nambari ifuatayo haitafanya kazi kama inavyotarajiwa kwenye Windows kwa sababu hakuna mabadiliko ya mazingira ya LANG na yaliyomo kwenye amri ya tarehe ni tofauti.

Kuita amri ya tarehe katika moduli ya mchakato.

Matokeo ya pato la amri ya tarehe hubadilika kulingana na thamani ya utofauti wa mazingira ya LANG.

print(os.getenv('LANG'))
# ja_JP.UTF-8

print(subprocess.check_output('date', encoding='utf-8'))
# 2018年 7月12日 木曜日 20時54分13秒 JST
# 

os.environ['LANG'] = 'en_US'

print(subprocess.check_output('date', encoding='utf-8'))
# Thu Jul 12 20:54:13 JST 2018
# 

Kwa sababu ya ufafanuzi, tumebadilisha mabadiliko ya mazingira ya LANG katika os. Environ, lakini Python hutoa moduli ya eneo kudhibiti eneo.

Kubadilisha michakato na anuwai ya mazingira

Inawezekana pia kubadili mchakato kulingana na thamani ya mabadiliko ya mazingira.

Hapa kuna mfano wa kubadilisha pato kulingana na utofauti wa mazingira ya LANG katika mipangilio ya lugha. Hapa tunatumia njia ya kuanza na () kuamua ikiwa kamba inaanza na kamba iliyoainishwa, lakini ikiwa unataka kuamua mechi sawa, unaweza kutumia “==” kulinganisha.

print(os.getenv('LANG'))
# en_US

if os.getenv('LANG').startswith('ja'):
    print('こんにちは')
else:
    print('Hello')
# Hello

os.environ['LANG'] = 'ja_JP'

if os.getenv('LANG').startswith('ja'):
    print('こんにちは')
else:
    print('Hello')
# こんにちは

Kwa kuongezea, ikiwa anuwai ya mazingira imewekwa kuonyesha mazingira ya maendeleo na mazingira ya uzalishaji, kwa mfano, unaweza kupata maadili ya anuwai hizi na ubadilishe mchakato.

Copied title and URL