Di Python de wergirtin, zêdekirin, binivîsandin û rakirina guherbarên hawîrdorê (os.environ)

Dikan

Guherbarên hawîrdorê dikarin bi karanîna os.environ di bernameyên Python de werin girtin, kontrol kirin, saz kirin (zêdekirin an nivîsandin), û jêbirin. Zanibe ku guheztinên ku bi sazkirin an jêbirina guherbarên hawîrdorê têne kirin tenê di nav bernameya Python de bi bandor in. Ew nayê vê wateyê ku dê guherbarên hawîrdora pergalê ji nû ve bêne nivîsandin.

Agahdariya jêrîn li vir tê dayîn.

  • os.environ
  • Guherbarên hawîrdorê bistînin.
  • Guherbarên hawîrdorê bicîh bikin (lê zêde bikin/binivîsin)
  • Guherbarên hawîrdorê jêbirin
  • Bandora guheztina guherbarên hawîrdorê
  • Veguheztina pêvajoyan bi guherbarên hawîrdorê

Modulê os îtxal bikin û bikar bînin. Ji ber ku ew pirtûkxaneyek standard e, sazkirinek pêvek nayê xwestin. Modula jêr -pêvajoyê jî di pirtûkxaneya standard de tê de ye.

import os
import subprocess

os.environ

Cureyê os.environ os._Environ e.

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

os._Environ nexşeyek celebek nexşeyê ye ku cotek mifte û nirx heye, û heman rêbazên ferhengê (celebê dîktatorî) heye. Navê guherbar ê jîngehê kilît e, û nirxê wê jî nirx e.

Dema ku modulasyona os tê hinartin naveroka os.environ dê were barkirin. Dema ku bername dixebite ger naveroka pergalê jî bi navgînên din werin guheztin naveroka os.environ dê neyê nûve kirin.

Lîste bi çapê () tê xuyang kirin.

# print(os.environ)

Mîna ferhengê, hûn dikarin rêgezên jêrîn bikar bînin, an jî bikar bînin da ku hebûna kilît û nirxan kontrol bikin.

  • keys()
  • values()

Proseskirina kilît û nirxan di bingeh de heman tişt e ji bo ferhengan. Nimûne li jêr têne dayîn.

Guherbarên hawîrdorê bistînin.

os.environ[Environment variable name]
Ev ê dihêle hûn nirxa guherbar a jîngehê bistînin, lê heke hûn navê guherbarek jîngehê ya ku tune diyar bikin, hûn ê xeletiyek (KeyError) bistînin.

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

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

Rêbaza get () ya os.environ dikare were bikar anîn da ku nirxa xwerû bistîne ger ew tune be. Ev jî heman ferheng e.

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

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

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

Fonksiyona os.getenv () jî tê peyda kirin. Mîna rêbaza get () ya ferhengê, ger kilît tune be, ew nirxa xwerû vedigere. Ev fonksiyon kêrhatî ye ger hûn tenê dixwazin nirxa guherbarek jîngehê bistînin û kontrol bikin.

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

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

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

Guherbarên hawîrdorê bicîh bikin (lê zêde bikin/binivîsin)

os.environ[Environment variable name]
Bi danîna nirxek ji bo vê, hûn dikarin guherbarek jîngehê saz bikin.

Dema ku navek guherbar a jîngehê ya nû tête diyar kirin, guherbariya jîngehê nû tê zêdekirin, û dema ku navê guherbarek jîngehê ya heyî tête diyar kirin, nirxa guherbar a jîngehê tê nivîsandin.

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

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

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

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

Zanibe ku tayînkirina tiştek ji rêzê pê ve dê bibe sedema xeletiyek (TypeError). Heke hûn dixwazin nirxek hejmarî bidin, wê wekî rêzek diyar bikin.

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

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

Fonksiyona os.putenv () jî tê peyda kirin. Lêbelê, nirxa os.environ dema ku ji hêla os.putenv () ve hatî destnîşan kirin nayê nûve kirin. Ji ber vê yekê, çêtir e ku meriv mifteya (navê guherbar a jîngehê) ya os.environ diyar bike û nirxa ku di mînaka jorîn de hatî destnîşan kirin destnîşan bike.

Ger putenv () piştgirî be, wezîfeyek ji bo tiştek di os.environ de dê bixweber li bangewaziyek têkildar a putenv () were veguheztin. Di pratîkê de, tayînkirina tiştek li os.environ xebatek bijarte ye, ji ber ku bangek rasterast ji putenv () re dê os.environ nûve neke.
os.putenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Wekî ku me berê jî behs kir, guheztinên ku bi zêdekirin an guheztina guherbarên jîngehê ve têne çêkirin tenê di nav bernameya Python de bi bandor in. Ew nayê vê wateyê ku dê guherbarên hawîrdora pergalê ji nû ve bêne nivîsandin.

Zanibe ku guheztina nirx dikare li gorî OS -yê bibe sedema derketinek bîranînê.

Nîşe: Li ser hin platforman, di nav de FreeBSD û Mac OS X, guheztina nirxa hawîrdorê dibe ku bibe sedema lehiya bîranînê.
os.putenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Ev ji ber taybetmendiya putenv () ya OS -ê bixwe ye.

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)

Guherbarên hawîrdorê jêbirin

Ji bo guheztina guherbarek jîngehê, rêbaza pop () ya os.environ an jî daxuyaniya del bikar bînin. Eynî wek ferheng.

Ya jêrîn mînakek pop () e.

pop () nirxa guherbara hawîrdorê ya ku hatî jêbirin vedigere. Bi xwerû, destnîşankirina guherbarek jîngehê ya ku tune ye dê bibe sedema xeletiyek (KeyError), lê diyarkirina argûmana duyemîn dê nirxa guherbariya jîngehê vegere ger ew tune be.

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

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

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

Ya jêrîn mînakek del e.

Guherbara hawîrdorê dîsa tê zêdekirin, û paşê tê jêbirin. Ger guherbar jîngehê tune be, xeletiyek (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'

Fonksiyona os.unsetenv () jî tê peyda kirin. Lêbelê, wekî os.putenv (), nirxa os.environ dema ku ji hêla os.unsetenv () ve tê jêbirin nayê nûve kirin. Ji ber vê yekê, çêtir e ku meriv mifteya (navê guherbar a jîngehê) ya os.environ diyar bike û wekî ku di mînaka jor de hatî xuyang kirin jê bibe.

Ger unsetenv () piştgirî be, jêbirina hêmanek di os.environ de dê bixweber vegere banga têkildar a unsetenv (). Di pratîkê de, jêbirina tiştan di os.environ de xebatek bijarte ye, ji ber ku bangên rasterast ji bo unsetenv () dê os.environ nûve neke.
os.unsetenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Jêbirina guherbarên hawîrdorê jî tenê di wê bernameya Python de bi bandor e. Ew guherbarên hawîrdora pergalê jê nake.

Bandora guheztina guherbarên hawîrdorê

Wekî ku min gelek caran nivîsandiye, guheztin (sazkirin an jêbirin) guherbara hawîrdora os.environ guherbara hawîrdora pergalê naguhere, lê ew bandorê li pêvajoyên jêrîn ên ku di bernameyê de têne destpêkirin dike.

Koda jêrîn dê wekî ku tê hêvî kirin li Windows -ê nexebite ji ber ku guherbarek jîngeha LANG tune û naveroka fermana tarîxê cûda ye.

Di modula jêr -pêvajoyê de gazî fermana tarîxê dikin.

Encama derketina fermana tarîxê li gorî nirxa guherbar hawîrdora LANG diguhere.

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
# 

Ji bo ravekirinê, me guherbara hawîrdora LANG -ê di os.environ de guherand, lê Python ji bo kontrolkirina deverê modulek herêmî dide.

Veguheztina pêvajoyan bi guherbarên hawîrdorê

Di heman demê de gengaz e ku meriv pêvajoyê li gorî nirxa guherbarek jîngehê biguhezîne.

Li vir mînaka guheztina derketinê ya li gorî guherbara hawîrdora LANG -ê di mîhengên zimên de heye. Li vir em rêbaza startwith () bikar tînin da ku em diyar bikin ka rêzik bi xêzika diyarkirî dest pê dike, lê ger hûn dixwazin lihevhatina rastîn diyar bikin, hûn dikarin “==” ji bo berhevdanê bikar bînin.

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')
# こんにちは

Digel vê yekê, heke guherbarên hawîrdorê têne danîn ku jîngeha pêşkeftinê û hawîrdora hilberînê destnîşan bikin, mînakî, hûn dikarin nirxên van guherbaran bistînin û pêvajoyê veguherînin.

Copied title and URL