Ətraf mühit dəyişənləri os.environ istifadə edərək Python proqramlarında əldə edilə bilər, yoxlanıla bilər, quraşdırıla bilər (əlavə və ya yenidən yazılır) və silinə bilər. Diqqət yetirin ki, mühit dəyişənlərini təyin etmək və ya silməklə edilən dəyişikliklər yalnız Python proqramı çərçivəsində təsirlidir. Sistem mühiti dəyişənlərinin yenidən yazılacağı mənasına gəlmir.
Aşağıdakı məlumatlar burada verilmişdir.
os.environ
- Ətraf mühit dəyişənlərini əldə edin.
- Ətraf mühit dəyişənlərini təyin edin (əlavə edin/yazın)
- Ətraf mühit dəyişənlərini silin
- Dəyişən mühit dəyişənlərinin təsiri
- Ətraf mühit dəyişənlərinə görə proseslərin dəyişdirilməsi
Os modulunu idxal edin və istifadə edin. Standart kitabxana olduğundan əlavə quraşdırma tələb olunmur. Alt proses modulu da standart kitabxanaya daxil edilmişdir.
import os
import subprocess
os.environ
Os.environ növü os._Environ.
print(type(os.environ))
# <class 'os._Environ'>
os._Environ, bir cüt açar və dəyəri olan bir xəritə tipli bir obyektdir və lüğətlə eyni üsullara malikdir (dict növü). Ətraf mühit dəyişəninin adı açardır və dəyəri dəyərdir.
Os modulu idxal edildikdə os.environ məzmunu yüklənəcək. Proqram işləyərkən sistem mühiti dəyişənləri başqa vasitələrlə dəyişdirilsə belə os.environ məzmunu yenilənməyəcək.
Siyahı print () ilə göstərilir.
# print(os.environ)
Sözlükdə olduğu kimi, aşağıdakı metodlardan istifadə edə və ya düymələrin və dəyərlərin mövcudluğunu yoxlamaq üçün istifadə edə bilərsiniz.
keys()
values()
Açarların və dəyərlərin işlənməsi əsasən lüğətlərdəki kimidir. Nümunələr aşağıda verilmişdir.
Ətraf mühit dəyişənlərini əldə edin.
os.environ[Environment variable name]
Bu, mühit dəyişəninin dəyərini əldə etməyə imkan verəcək, ancaq mövcud olmayan bir mühit dəyişən adı təyin etsəniz, bir səhv (KeyError) alacaqsınız.
print(os.environ['LANG'])
# ja_JP.UTF-8
# print(os.environ['NEW_KEY'])
# KeyError: 'NEW_KEY'
Os.environ -un get () metodu, mövcud deyilsə, standart dəyəri əldə etmək üçün istifadə edilə bilər. Bu da lüğətlə eynidir.
print(os.environ.get('LANG'))
# ja_JP.UTF-8
print(os.environ.get('NEW_KEY'))
# None
print(os.environ.get('NEW_KEY', 'default'))
# default
Os.getenv () funksiyası da təmin edilmişdir. Lüğətin get () metodu kimi, açar yoxdursa, standart dəyəri qaytarır. Bir mühit dəyişəninin dəyərini yoxlamaq və yoxlamaq istəyirsinizsə bu funksiya faydalıdır.
print(os.getenv('LANG'))
# ja_JP.UTF-8
print(os.getenv('NEW_KEY'))
# None
print(os.getenv('NEW_KEY', 'default'))
# default
Ətraf mühit dəyişənlərini təyin edin (əlavə edin/yazın)
os.environ[Environment variable name]
Buna bir dəyər təyin edərək, bir mühit dəyişənini təyin edə bilərsiniz.
Yeni bir mühit dəyişən adı təyin edildikdə, mühit dəyişəni yeni əlavə olunur və mövcud bir mühit dəyişən adı göstərildikdə, mühit dəyişəninin dəyəri yazılır.
os.environ['NEW_KEY'] = 'test'
print(os.environ['NEW_KEY'])
# test
os.environ['NEW_KEY'] = 'test2'
print(os.environ['NEW_KEY'])
# test2
Bir sətirdən başqa bir şey təyin etmənin bir səhvlə nəticələnəcəyini unutmayın (TypeError). Bir ədədi dəyər təyin etmək istəyirsinizsə, onu simli olaraq göstərin.
# os.environ['NEW_KEY'] = 100
# TypeError: str expected, not int
os.environ['NEW_KEY'] = '100'
Os.putenv () funksiyası da təmin edilmişdir. Lakin, os.environ dəyəri os.putenv () tərəfindən təyin edildikdə yenilənmir. Bu səbəbdən, os.environ açarını (mühit dəyişən adı) təyin etmək və yuxarıdakı nümunədə göstərildiyi kimi dəyəri təyin etmək üstünlük təşkil edir.
Putenv () dəstəklənərsə, os.environ -dakı bir elementin təyinatı avtomatik olaraq putenv () -ə uyğun bir zəngə çevriləcək. Təcrübədə, os.environ -da bir elementə təyin etmək üstünlük verilən əməliyyatdır, çünki putenv () -ə birbaşa zəng os.environ -u yeniləməyəcək.
os.putenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Daha əvvəl də qeyd edildiyi kimi, ətraf mühit dəyişənlərini əlavə etmək və ya üzərinə yazmaqla edilən dəyişikliklər yalnız Python proqramı çərçivəsində təsirlidir. Sistem mühiti dəyişənlərinin yenidən yazılacağı mənasına gəlmir.
Dəyərin dəyişdirilməsinin OS -dən asılı olaraq yaddaş sızmasına səbəb ola biləcəyini unutmayın.
Qeyd: FreeBSD və Mac OS X daxil olmaqla bəzi platformalarda mühitin dəyərinin dəyişdirilməsi yaddaş sızmasına səbəb ola bilər.
os.putenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Bu, əməliyyat sisteminin özünün putenv () spesifikasiyasına bağlıdır.
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)
Ətraf mühit dəyişənlərini silin
Bir mühit dəyişənini silmək üçün os.environ -un pop () metodundan və ya del ifadəsindən istifadə edin. Lüğətlə eyni.
Aşağıdakı pop () nümunəsidir.
pop (), silinmiş mühit dəyişəninin dəyərini qaytarır. Varsayılan olaraq, mövcud olmayan bir mühit dəyişəninin göstərilməsi bir səhv (KeyError) ilə nəticələnəcək, ancaq ikinci arqumentin göstərilməsi, əgər yoxdursa, mühit dəyişəninin dəyərini qaytaracaq.
print(os.environ.pop('NEW_KEY'))
# 100
# print(os.environ.pop('NEW_KEY'))
# KeyError: 'NEW_KEY'
print(os.environ.pop('NEW_KEY', None))
# None
Aşağıdakı del nümunəsidir.
Ətraf mühit dəyişəni yenidən əlavə olunur və sonra silinir. Ətraf mühit dəyişən yoxdursa, bir səhv (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'
Os.unsetenv () funksiyası da təmin edilmişdir. Lakin, os.putenv () ilə olduğu kimi, os.environ dəyəri də os.unsetenv () tərəfindən silindikdə yenilənmir. Buna görə də, os.environ açarını (mühit dəyişən adı) təyin etmək və yuxarıdakı nümunədə göstərildiyi kimi silmək daha məqsədəuyğundur.
Unsetenv () dəstəklənərsə, os.environ -da bir elementin silinməsi avtomatik olaraq unsetenv () -ə uyğun gələn zəngə çevriləcək. Praktikada, os.environ -dakı elementləri silmək üstünlük verilən əməliyyatdır, çünki unsetenv () -ə birbaşa zənglər os.environ -u yeniləməyəcək.
os.unsetenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Ətraf mühit dəyişənlərinin silinməsi də yalnız həmin Python proqramında təsirli olur. Sistem mühiti dəyişənlərini silmir.
Dəyişən mühit dəyişənlərinin təsiri
Dəfələrlə yazdığım kimi, os.environ mühit dəyişəninin dəyişdirilməsi (qurulması və ya silinməsi) sistem mühiti dəyişənini dəyişdirmir, ancaq proqramda başlanan alt prosesləri təsir edir.
Aşağıdakı kod Windows -da gözlənildiyi kimi işləməyəcək, çünki LANG mühit dəyişənləri yoxdur və tarix əmrinin məzmunu fərqlidir.
Alt proses modulunda tarix əmrinin çağırılması.
Tarix əmrinin çıxış nəticəsi LANG mühit dəyişəninin dəyərindən asılı olaraq dəyişir.
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
#
İzahat üçün, os.environ -dakı LANG mühit dəyişənini dəyişdirdik, ancaq Python yerli dili idarə etmək üçün bir yerli modul təmin edir.
Ətraf mühit dəyişənlərinə görə proseslərin dəyişdirilməsi
Ətraf mühit dəyişəninin dəyərinə görə prosesi dəyişdirmək də mümkündür.
Çıxış dil parametrlərində LANG mühit dəyişəninə görə dəyişdirilməsinin bir nümunəsidir. Burada, stringin göstərilən sətirlə başladığını müəyyən etmək üçün startwith () metodundan istifadə edirik, ancaq tam uyğunluğu müəyyən etmək istəyirsinizsə, müqayisə etmək üçün “==” istifadə edə bilərsiniz.
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')
# こんにちは
Əlavə olaraq, mühit dəyişənləri inkişaf mühitini və istehsal mühitini göstərmək üçün qurulubsa, məsələn, bu dəyişənlərin dəyərlərini əldə edə və prosesi dəyişə bilərsiniz.