પર્યાવરણ ચલો os.environ નો ઉપયોગ કરીને પાયથોન પ્રોગ્રામ્સમાં પુન retrieપ્રાપ્ત, ચકાસાયેલ, સેટ (ઉમેરાયેલ અથવા ઓવરરાઇટ), અને કા deletedી શકાય છે. નોંધ કરો કે પર્યાવરણ ચલોને સેટ કરીને અથવા કા deleી નાખવાથી કરવામાં આવેલા ફેરફારો ફક્ત પાયથોન પ્રોગ્રામમાં જ અસરકારક છે. તેનો અર્થ એ નથી કે સિસ્ટમ પર્યાવરણ ચલો ફરીથી લખાશે.
નીચેની માહિતી અહીં આપવામાં આવી છે.
os.environ
- પર્યાવરણ ચલો મેળવો.
- પર્યાવરણ ચલો સેટ કરો (ઉમેરો/ફરીથી લખો)
- પર્યાવરણ ચલો દૂર કરો
- બદલાતા પર્યાવરણ ચલોની અસર
- પર્યાવરણ ચલો દ્વારા પ્રક્રિયાઓ બદલવી
ઓએસ મોડ્યુલ આયાત કરો અને ઉપયોગ કરો. તે પ્રમાણભૂત પુસ્તકાલય હોવાથી, વધારાના સ્થાપનની જરૂર નથી. સબપ્રોસેસ મોડ્યુલ પ્રમાણભૂત પુસ્તકાલયમાં પણ સમાવિષ્ટ છે.
import os
import subprocess
પર્યાવરણ
Os.environ નો પ્રકાર os._Environ છે.
print(type(os.environ))
# <class '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.putenv () દ્વારા સેટ કરવામાં આવે ત્યારે os.environ ની કિંમત અપડેટ થતી નથી. આ કારણોસર, 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)
પર્યાવરણ ચલો દૂર કરો
પર્યાવરણ ચલને કા deleteી નાખવા માટે, os.environ ની પ (પ () પદ્ધતિ અથવા ડેલ સ્ટેટમેન્ટનો ઉપયોગ કરો. શબ્દકોશ જેવું જ.
નીચે પોપ () નું ઉદાહરણ છે.
pop () કા theી નાખવામાં આવેલ પર્યાવરણ ચલનું મૂલ્ય આપે છે. મૂળભૂત રીતે, પર્યાવરણ ચલનો ઉલ્લેખ કરવો કે જે અસ્તિત્વમાં નથી તે ભૂલ (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
નીચે ડેલનું ઉદાહરણ છે.
પર્યાવરણ ચલ ફરીથી ઉમેરવામાં આવે છે, અને પછી કા deletedી નાખવામાં આવે છે. જો પર્યાવરણ ચલ અસ્તિત્વમાં નથી, તો ભૂલ (કી એરર).
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 () દ્વારા કા deletedી નાખવામાં આવે ત્યારે અપડેટ થતી નથી. તેથી, os.environ ની કી (પર્યાવરણ ચલ નામ) નો ઉલ્લેખ કરવો અને ઉપરના ઉદાહરણમાં બતાવ્યા પ્રમાણે તેને કા deleteી નાખવું વધુ સારું છે.
જો unsetenv () સપોર્ટેડ હોય, તો os.environ માં આઇટમ કા deleી નાખવાથી અનસેટેનવ () પર આપમેળે અનુરૂપ કોલમાં અનુવાદ થશે. વ્યવહારમાં, os.environ માં આઇટમ્સ કાtingી નાખવી એ પ્રિફર્ડ ઓપરેશન છે, કારણ કે unsetenv () પર ડાયરેક્ટ કોલ્સ os.environ અપડેટ કરશે નહીં.
os.unsetenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
પર્યાવરણીય ચલોને કાtingી નાખવું એ પાયથોન પ્રોગ્રામમાં જ અસરકારક છે. તે સિસ્ટમ પર્યાવરણ ચલોને દૂર કરતું નથી.
બદલાતા પર્યાવરણ ચલોની અસર
જેમ મેં વારંવાર લખ્યું છે, os.environ પર્યાવરણ ચલને બદલવું (ગોઠવવું અથવા કાtingી નાખવું) સિસ્ટમ પર્યાવરણ ચલને બદલતું નથી, પરંતુ તે પ્રોગ્રામમાં શરૂ કરવામાં આવેલી પેટા-પ્રક્રિયાઓને અસર કરે છે.
નીચેનો કોડ વિન્ડોઝ પર અપેક્ષા મુજબ કામ કરશે નહીં કારણ કે ત્યાં કોઈ 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 પર્યાવરણ ચલ મુજબ આઉટપુટ બદલવાનું ઉદાહરણ છે. અહીં આપણે સ્ટ્રિંગવિથ () પદ્ધતિનો ઉપયોગ કરી રહ્યા છીએ તે નક્કી કરવા માટે કે શબ્દમાળા નિર્દિષ્ટ શબ્દમાળાથી શરૂ થાય છે, પરંતુ જો તમે ચોક્કસ મેળ નક્કી કરવા માંગતા હો, તો તમે તુલના કરવા માટે “==” નો ઉપયોગ કરી શકો છો.
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')
# こんにちは
વધુમાં, જો પર્યાવરણ ચલો વિકાસ પર્યાવરણ અને ઉત્પાદન પર્યાવરણ સૂચવવા માટે સુયોજિત છે, ઉદાહરણ તરીકે, તમે આ ચલોના મૂલ્યો મેળવી શકો છો અને પ્રક્રિયાને બદલી શકો છો.