पर्यावरण व्हेरिएबल्स os.environ वापरून पायथन प्रोग्राममध्ये पुनर्प्राप्त, तपासले, सेट (जोडलेले किंवा अधिलिखित) केले जाऊ शकतात आणि हटविले जाऊ शकतात. लक्षात घ्या की पर्यावरण व्हेरिएबल्स सेट किंवा हटवून केलेले बदल केवळ पायथन प्रोग्राममध्ये प्रभावी आहेत. याचा अर्थ असा नाही की सिस्टम पर्यावरण व्हेरिएबल्स पुन्हा लिहिल्या जातील.
खालील माहिती येथे दिली आहे.
os.environ
- पर्यावरण व्हेरिएबल्स मिळवा.
- पर्यावरण व्हेरिएबल्स सेट करा (जोडा/अधिलिखित करा)
- पर्यावरण व्हेरिएबल्स काढा
- बदलत्या पर्यावरण व्हेरिएबल्सचा प्रभाव
- पर्यावरण व्हेरिएबल्सद्वारे प्रक्रिया स्विच करणे
ओएस मॉड्यूल आयात करा आणि वापरा. हे एक मानक ग्रंथालय असल्याने, कोणत्याही अतिरिक्त स्थापनेची आवश्यकता नाही. सबप्रोसेस मॉड्यूल मानक ग्रंथालयात देखील समाविष्ट आहे.
import os
import subprocess
वातावरण
Os.environ चा प्रकार os._Environ आहे.
print(type(os.environ))
# <class 'os._Environ'>
os._Environ एक नकाशा प्रकार ऑब्जेक्ट आहे जो की आणि मूल्याच्या जोडीसह आहे, आणि त्याच्या शब्दकोश (डिक्ट प्रकार) सारख्याच पद्धती आहेत. पर्यावरण व्हेरिएबल नाव की आहे आणि त्याचे मूल्य मूल्य आहे.
OS मॉड्यूल आयात केल्यावर os.environ ची सामग्री लोड केली जाईल. Os.environ ची सामग्री अद्यतनित केली जाणार नाही जरी प्रोग्राम चालू असताना सिस्टम पर्यावरण व्हेरिएबल्स इतर मार्गांनी बदलली गेली.
सूची प्रिंट () सह प्रदर्शित केली जाते.
# print(os.environ)
शब्दकोशाप्रमाणे, आपण खालील पद्धती वापरू शकता किंवा की आणि मूल्यांचे अस्तित्व तपासण्यासाठी वापरू शकता.
keys()
values()
की आणि मूल्यांची प्रक्रिया मुळात शब्दकोशांसाठी सारखीच आहे. उदाहरणे खाली दिली आहेत.
पर्यावरण व्हेरिएबल्स मिळवा.
os.environ[Environment variable name]
हे आपल्याला पर्यावरण व्हेरिएबलचे मूल्य मिळविण्यास अनुमती देईल, परंतु आपण अस्तित्वात नसलेल्या पर्यावरण व्हेरिएबलचे नाव निर्दिष्ट केल्यास, आपल्याला एक त्रुटी मिळेल (की एरर).
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
लक्षात घ्या की स्ट्रिंग व्यतिरिक्त इतर काहीही नियुक्त केल्याने त्रुटी येईल (TypeError). जर तुम्हाला संख्यात्मक मूल्य नियुक्त करायचे असेल तर ते स्ट्रिंग म्हणून निर्दिष्ट करा.
# 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
खालील डेलचे उदाहरण आहे.
पर्यावरण व्हेरिएबल पुन्हा जोडले जाते, आणि नंतर हटवले जाते. पर्यावरण व्हेरिएबल अस्तित्वात नसल्यास, एक त्रुटी (की एरर).
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')
# こんにちは
याव्यतिरिक्त, जर पर्यावरण व्हेरिएबल्स विकास वातावरण आणि उत्पादन वातावरण दर्शविण्यासाठी सेट केले गेले असतील, उदाहरणार्थ, आपण या व्हेरिएबल्सची मूल्ये मिळवू शकता आणि प्रक्रिया बदलू शकता.