ازگر میں ماحولیاتی متغیرات حاصل کرنا ، شامل کرنا ، اوور رائٹ کرنا ، اور حذف کرنا (os.environ)

کاروبار

ماحولیاتی متغیرات os.environ کا استعمال کرتے ہوئے ازگر پروگراموں میں بازیافت ، چیک ، سیٹ (شامل یا اوور رائٹ) ، اور حذف کیے جا سکتے ہیں۔ نوٹ کریں کہ ماحولیاتی متغیرات کو ترتیب دینے یا حذف کرنے سے کی جانے والی تبدیلیاں صرف ازگر پروگرام کے اندر موثر ہوتی ہیں۔ اس کا مطلب یہ نہیں ہے کہ سسٹم ماحولیاتی متغیرات کو دوبارہ لکھا جائے گا۔

درج ذیل معلومات یہاں فراہم کی گئی ہیں۔

  • os.environ
  • ماحولیاتی متغیرات حاصل کریں۔
  • ماحولیاتی متغیرات کو سیٹ (شامل/اوور رائٹ) کریں۔
  • ماحول کے متغیرات کو ہٹا دیں۔
  • ماحول کے متغیرات کو تبدیل کرنے کا اثر۔
  • ماحول کے متغیرات کے ذریعے عمل کو تبدیل کرنا۔

او ایس ماڈیول درآمد اور استعمال کریں۔ چونکہ یہ ایک معیاری لائبریری ہے ، اس لیے کسی اضافی تنصیب کی ضرورت نہیں ہے۔ سب پروسیس ماڈیول بھی معیاری لائبریری میں شامل ہے۔

import os
import subprocess

ماحول

os.environ کی قسم os.Environ ہے۔

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

os._Environ ایک میپ ٹائپ آبجیکٹ ہے جس میں کلید اور قدر کا جوڑا ہوتا ہے ، اور اس کے پاس ایک طریقے ہیں جیسے لغت (ڈک ٹائپ)۔ ماحولیاتی متغیر نام کلید ہے ، اور اس کی قیمت قدر ہے۔

os.environ کے مندرجات کو لوڈ کیا جائے گا جب OS ماڈیول درآمد کیا جائے گا۔ os.environ کے مندرجات کو اپ ڈیٹ نہیں کیا جائے گا یہاں تک کہ اگر پروگرام کے چلنے کے دوران سسٹم کے ماحول کے متغیرات کو دوسرے طریقوں سے تبدیل کیا جائے۔

فہرست پرنٹ () کے ساتھ ظاہر ہوتی ہے۔

# print(os.environ)

لغت کی طرح ، آپ درج ذیل طریقے استعمال کرسکتے ہیں ، یا چابیاں اور اقدار کے وجود کو چیک کرنے کے لیے استعمال کرسکتے ہیں۔

  • keys()
  • values()

کلیدوں اور اقدار کی پروسیسنگ بنیادی طور پر لغات کی طرح ہے۔ مثالیں ذیل میں دی گئی ہیں۔

ماحولیاتی متغیرات حاصل کریں۔

os.environ[Environment variable name]
یہ آپ کو ماحولیاتی متغیر کی قدر حاصل کرنے کی اجازت دے گا ، لیکن اگر آپ ماحولیاتی متغیر کا نام بتاتے ہیں جو موجود نہیں ہے تو آپ کو ایک خرابی (KeyError) ملے گی۔

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

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

os.environ کا get () طریقہ ڈیفالٹ ویلیو حاصل کرنے کے لیے استعمال کیا جا سکتا ہے اگر یہ موجود نہیں ہے۔ یہ بھی لغت کی طرح ہے۔

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 () بھی فراہم کیا گیا ہے۔ لغت کے get () طریقہ کی طرح ، اگر کلید موجود نہیں ہے تو یہ ڈیفالٹ ویلیو لوٹاتی ہے۔ یہ فنکشن مفید ہے اگر آپ صرف ماحول کے متغیر کی قیمت حاصل کرنا اور اس کی جانچ کرنا چاہتے ہیں۔

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

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

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

ماحولیاتی متغیرات کو سیٹ (شامل/اوور رائٹ) کریں۔

os.environ[Environment variable name]
اس کو ایک قیمت تفویض کرکے ، آپ ماحولیاتی متغیر کو ترتیب دے سکتے ہیں۔

جب ایک نیا ماحولیاتی متغیر نام متعین کیا جاتا ہے ، ماحولیاتی متغیر کو نیا شامل کیا جاتا ہے ، اور جب موجودہ ماحولیاتی متغیر کا نام متعین کیا جاتا ہے تو ، ماحولیاتی متغیر کی قدر کو اوور رائٹ کیا جاتا ہے۔

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

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

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

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

نوٹ کریں کہ سٹرنگ کے علاوہ کوئی اور چیز تفویض کرنے کے نتیجے میں غلطی ہوگی (ٹائپ ایرر)۔ اگر آپ ایک عددی قدر تفویض کرنا چاہتے ہیں تو اسے بطور تار بیان کریں۔

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

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

فنکشن os.putenv () بھی فراہم کیا گیا ہے۔ تاہم ، os.environ کی قدر کو اپ ڈیٹ نہیں کیا جاتا ہے جب یہ os.putenv () کے ذریعہ سیٹ کیا جاتا ہے۔ اس وجہ سے ، افضل ہے کہ os.environ کی کلید (ماحول متغیر نام) کی وضاحت کریں اور قدر کو تفویض کریں جیسا کہ اوپر کی مثال میں دکھایا گیا ہے۔

اگر putenv () تعاون یافتہ ہے تو ، os.environ میں کسی آئٹم کی تفویض خود بخود اسی کال میں putenv () میں تبدیل ہو جائے گی۔ عملی طور پر ، os.environ میں کسی آئٹم کو تفویض کرنا ترجیحی آپریشن ہے ، کیونکہ putenv () پر براہ راست کال os.environ کو اپ ڈیٹ نہیں کرے گی۔
os.putenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

جیسا کہ پہلے ذکر کیا گیا ہے ، ماحولیاتی متغیرات کو شامل یا اوور رائٹ کر کے کی جانے والی تبدیلیاں صرف ازگر پروگرام کے اندر موثر ہوتی ہیں۔ اس کا مطلب یہ نہیں ہے کہ سسٹم ماحولیاتی متغیرات کو دوبارہ لکھا جائے گا۔

نوٹ کریں کہ قیمت کو تبدیل کرنے سے OS پر منحصر میموری لیک ہوسکتی ہے۔

نوٹ: کچھ پلیٹ فارمز پر ، بشمول فری بی ایس ڈی اور میک او ایس ایکس ، ماحول کی قدر کو تبدیل کرنا میموری لیک ہونے کا سبب بن سکتا ہے۔
os.putenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

یہ OS کی خود putenv () تصریح کی وجہ سے ہے۔

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)

ماحول کے متغیرات کو ہٹا دیں۔

ماحولیاتی متغیر کو حذف کرنے کے لیے ، os.environ کا پاپ () طریقہ استعمال کریں یا ڈیل بیان۔ لغت کی طرح۔

مندرجہ ذیل پاپ () کی ایک مثال ہے۔

pop () ماحولیاتی متغیر کی قدر لوٹاتا ہے جسے حذف کردیا گیا تھا۔ پہلے سے طے شدہ طور پر ، ماحولیاتی متغیر کی وضاحت کرنا جو موجود نہیں ہے اس کے نتیجے میں خرابی ہوگی (KeyError) ، لیکن دوسری دلیل کی وضاحت کرنے سے ماحولیاتی متغیر کی قیمت واپس آجائے گی اگر یہ موجود نہیں ہے۔

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

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

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

ڈیل کی ایک مثال درج ذیل ہے۔

ماحولیاتی متغیر کو دوبارہ شامل کیا جاتا ہے ، اور پھر حذف کردیا جاتا ہے۔ اگر ماحول متغیر موجود نہیں ہے تو ، ایک خرابی (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 () بھی فراہم کیا گیا ہے۔ تاہم ، جیسا کہ os.putenv () ہے ، os.environ کی قدر کو اپ ڈیٹ نہیں کیا جاتا ہے جب اسے os.unsetenv () کے ذریعے حذف کر دیا جاتا ہے۔ لہذا ، یہ افضل ہے کہ os.environ کی کلید (ماحول متغیر نام) کی وضاحت کریں اور اسے حذف کریں جیسا کہ اوپر کی مثال میں دکھایا گیا ہے۔

اگر unsetenv () تعاون یافتہ ہے تو ، os.environ میں کسی آئٹم کو حذف کرنے سے خود بخود اسی کال میں unsetenv () پر ترجمہ ہوجائے گا۔ عملی طور پر ، os.environ میں آئٹمز کو حذف کرنا ترجیحی آپریشن ہے ، کیونکہ unsetenv () پر براہ راست کالیں os.environ کو اپ ڈیٹ نہیں کریں گی۔
os.unsetenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

ماحولیاتی متغیرات کو حذف کرنا صرف اس ازگر پروگرام کے اندر موثر ہے۔ یہ سسٹم ماحول کے متغیرات کو نہیں ہٹاتا۔

ماحول کے متغیرات کو تبدیل کرنے کا اثر۔

جیسا کہ میں نے بار بار لکھا ہے ، os.environ ماحولیاتی متغیر کو تبدیل کرنا (ترتیب دینا یا حذف کرنا) سسٹم ماحولیاتی متغیر کو تبدیل نہیں کرتا ہے ، لیکن یہ پروگرام میں شروع ہونے والے ذیلی عمل کو متاثر کرتا ہے۔

ونڈوز پر حسب ذیل کوڈ کام نہیں کرے گا کیونکہ کوئی LANG ماحولیاتی متغیر نہیں ہے اور ڈیٹ کمانڈ کے مندرجات مختلف ہیں۔

سب پروسیس ماڈیول میں ڈیٹ کمانڈ کو کال کرنا۔

تاریخ کمانڈ کا آؤٹ پٹ نتیجہ 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
# 

وضاحت کی خاطر ، ہم نے os.environ میں LANG ماحولیاتی تغیر کو تبدیل کر دیا ہے ، لیکن ازگر لوکل کو کنٹرول کرنے کے لیے لوکل ماڈیول مہیا کرتا ہے۔

ماحول کے متغیرات کے ذریعے عمل کو تبدیل کرنا۔

ماحولیاتی متغیر کی قدر کے مطابق عمل کو تبدیل کرنا بھی ممکن ہے۔

زبان کی ترتیبات میں LANG ماحولیاتی تغیر کے مطابق آؤٹ پٹ کو تبدیل کرنے کی ایک مثال یہ ہے۔ یہاں ہم startswith () طریقہ استعمال کر رہے ہیں تاکہ اس بات کا تعین کیا جا سکے کہ سٹرنگ مخصوص سٹرنگ سے شروع ہوتی ہے ، لیکن اگر آپ درست میچ کا تعین کرنا چاہتے ہیں تو آپ موازنہ کرنے کے لیے "==” استعمال کر سکتے ہیں۔

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

اس کے علاوہ ، اگر ماحولیاتی متغیرات ترقیاتی ماحول اور پیداوار کے ماحول کی نشاندہی کرنے کے لیے مقرر کیے گئے ہیں ، مثال کے طور پر ، آپ ان متغیرات کی اقدار حاصل کر سکتے ہیں اور عمل کو تبدیل کر سکتے ہیں۔

Copied title and URL