පයිතන්හි පාරිසරික විචල්‍යයන් ලබා ගැනීම, එකතු කිරීම, නැවත ලිවීම සහ මකා දැමීම (os.environ)

ව්යාපාරික

පාරිසරික විචල්‍යයන් නැවත ලබා ගැනීමට, පරීක්‍ෂා කිරීමට, සැකසීමට (එකතු කිරීමට හෝ නැවත ලිවීමට) සහ පයිතන් වැඩසටහන් වලදී මකා දැමීමට os.environ භාවිතා කළ හැකිය. පරිසර විචල්‍යයන් සැකසීම හෝ මකා දැමීම මඟින් සිදු කරන ලද වෙනස්කම් සාර්‍ථක වන්නේ පයිතන් වැඩසටහන තුළ පමණක් බව සලකන්න. පද්ධති පරිසරයේ විචල්‍යයන් නැවත ලිවිය යුතු යැයි මින් අදහස් නොවේ.

පහත සඳහන් තොරතුරු මෙහි දක්වා ඇත.

  • os.environ
  • පාරිසරික විචල්‍යයන් ලබා ගන්න.
  • පරිසර විචල්‍යයන් සකසන්න (එකතු කරන්න/නැවත ලියන්න)
  • පාරිසරික විචල්යයන් ඉවත් කරන්න
  • වෙනස් වන පාරිසරික විචල්‍යයන්ගේ බලපෑම
  • පාරිසරික විචල්‍යයන් මඟින් ක්‍රියාවලිය මාරු කිරීම

OS මොඩියුලය ආයාත කර භාවිතා කරන්න. එය සම්මත පුස්තකාලයක් බැවින් අතිරේක ස්ථාපනයක් අවශ්‍ය නොවේ. සම්මත සැකසුම් මොඩියුලය ද සම්මත පුස්තකාලයට ඇතුළත් කර ඇත.

import os
import subprocess

os. පරිසරය

Os.environ වර්ගය os._In Environment වේ.

print(type(os.environ))
# <class '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

නූලක් හැර වෙනත් ඕනෑම දෙයක් පැවරීමෙන් දෝෂයක් (TypeError) සිදු වන බව සලකන්න. ඔබට සංඛ්‍යාත්මක අගයක් පැවරීමට අවශ්‍ය නම්, එය නූලක් ලෙස සඳහන් කරන්න.

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

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

Os.putenv () ශ්‍රිතය ද සපයා ඇත. කෙසේ වෙතත්, එය os.putenv () මඟින් සකසා ඇති විට එහි වටිනාකම යාවත්කාලීන නොවේ. මේ හේතුව නිසා, os.environ හි යතුර (පරිසර විචල්‍ය නාමය) සඳහන් කර ඉහත උදාහරණයේ දැක්වෙන පරිදි අගය නියම කිරීම වඩාත් සුදුසුය.

Putenv () ට සහය දක්වන්නේ නම්, os.en Environment හි අයිතමයක් වෙත පැවරුමක් ස්වයංක්‍රීයව අනුරූප ඇමතුමකට putenv () වෙත මාරු වේ. ප්‍රායෝගිකව, os.en Environment හි අයිතමයක් පැවරීම වඩාත් කැමති ක්‍රියාවලියයි, මන්ද putenv () වෙත callජු ඇමතුමක් ලබා දීම os.en Environment යාවත්කාලීන නොකරන බැවිනි.
os.putenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

කලින් සඳහන් කළ පරිදි, පරිසර විචල්‍යයන් එකතු කිරීමෙන් හෝ නැවත ලිවීමෙන් කරන ලද වෙනස්කම් සාර්‍ථක වන්නේ පයිතන් වැඩසටහන තුළ පමණි. පද්ධති පරිසරයේ විචල්‍යයන් නැවත ලිවිය යුතු යැයි මින් අදහස් නොවේ.

අගය වෙනස් කිරීම මෙහෙයුම් පද්ධතිය මත පදනම්ව මතක කාන්දුවක් ඇති විය හැකි බව සලකන්න.

සටහන: ෆ්‍රීබීඑස්ඩී සහ මැක් ඕඑස් එක්ස් ඇතුළු සමහර වේදිකාවල පරිසරයේ අගය වෙනස් කිරීම මතකය කාන්දු වීමට හේතු විය හැක.
os.putenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

මෙයට හේතුව මෙහෙයුම් පද්ධතියේම පුටෙන්ව් () පිරිවිතරයන් වීමයි.

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.unsetenv () මඟින් එය මකා දැමූ විට එහි වටිනාකම යාවත්කාලීන නොවේ. එම නිසා os.environ හි යතුර (පරිසර විචල්‍ය නාමය) සඳහන් කර ඉහත උදාහරණයේ දැක්වෙන පරිදි එය මකා දැමීම වඩාත් සුදුසුය.

Unsetenv () සඳහා සහය දක්වන්නේ නම්, os.environ තුළ අයිතමයක් මැකීම ස්වයංක්‍රීයව අනුරූපී ඇමතුම වෙත unsetenv () වෙත පරිවර්තනය වේ. ප්‍රායෝගිකව, os.environ හි අයිතමයන් මකා දැමීම වඩාත් කැමති ක්‍රියාවලියයි, මන්ද unsetenv () වෙත callsජු ඇමතුම් ලබා දීම os.en Environment යාවත්කාලීන නොකරන බැවිනි.
os.unsetenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

පාරිසරික විචල්‍යයන් මකා දැමීම ද ක්‍රියාත්මක වන්නේ එම පයිතන් වැඩසටහන තුළ පමණි. එය පද්ධති පරිසර විචල්‍යයන් ඉවත් නොකරයි.

වෙනස් වන පාරිසරික විචල්‍යයන්ගේ බලපෑම

මම නැවත නැවත ලියූ පරිදි, os.en Environment variable වෙනස් කිරීම (සැකසීම හෝ ඉවත් කිරීම) පද්ධති පරිසර විචල්‍යය වෙනස් නොකරන නමුත් එය වැඩසටහන තුළ දියත් කෙරෙන උප ක්‍රියාවලීන් කෙරෙහි බලපායි.

පහත කේතය වින්ඩෝස් හි බලාපොරොත්තු වූ පරිදි ක්‍රියා නොකරනු ඇත, මන්ද 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')
# こんにちは

ඊට අමතරව, වර්‍ගයේ පරිසරය සහ නිෂ්පාදන පරිසරය දැක්වීමට පාරිසරික විචල්‍යයන් සකසා ඇත්නම්, උදාහරණයක් ලෙස, ඔබට මෙම විචල්‍යයන්ගේ අගයන් ලබාගෙන ක්‍රියාවලිය මාරු කළ හැකිය.

Copied title and URL