ការទទួលការបន្ថែមការសរសេរជាន់លើនិងការលុបអថេរបរិស្ថាននៅក្នុង Python (os.environ)

អាជីវកម្ម

អថេរបរិស្ថានអាចត្រូវបានទាញយកមកកំណត់កំណត់ (បន្ថែមឬសរសេរជាន់លើ) និងលុបនៅក្នុងកម្មវិធី Python ដោយប្រើ os.environ ។ សូមកត់សម្គាល់ថាការផ្លាស់ប្តូរដែលធ្វើឡើងដោយការកំណត់ឬលុបអថេរបរិស្ថានមានប្រសិទ្ធភាពតែនៅក្នុងកម្មវិធី Python ប៉ុណ្ណោះ។ វាមិនមានន័យថាអថេរបរិស្ថានប្រព័ន្ធនឹងត្រូវបានសរសេរឡើងវិញទេ។

ព័ត៌មានខាងក្រោមនេះត្រូវបានផ្តល់ជូននៅទីនេះ។

  • os.environ
  • ទទួលបានអថេរបរិស្ថាន។
  • កំណត់ (បន្ថែម/សរសេរជាន់លើ) អថេរបរិស្ថាន
  • ដកអថេរបរិស្ថាន
  • ឥទ្ធិពលនៃការផ្លាស់ប្តូរអថេរបរិស្ថាន
  • ដំណើរការផ្លាស់ប្តូរដោយអថេរបរិស្ថាន

នាំចូលនិងប្រើម៉ូឌុល os ។ ដោយសារវាជាបណ្ណាល័យស្តង់ដារគ្មានការតំឡើងបន្ថែមទេ។ ម៉ូឌុលដំណើរការរងត្រូវបានរួមបញ្ចូលផងដែរនៅក្នុងបណ្ណាល័យស្តង់ដារ។

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'

វិធីសាស្រ្ត get () នៃ os.environ អាចត្រូវបានប្រើដើម្បីទទួលបានតម្លៃលំនាំដើមប្រសិនបើវាមិនមាន។ នេះក៏ដូចគ្នានឹងវចនានុក្រមដែរ។

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 () ត្រូវបានផ្តល់ជូនផងដែរ។ ដូចវិធីសាស្រ្តទទួល () នៃវចនានុក្រមវាត្រឡប់តម្លៃលំនាំដើមប្រសិនបើមិនមានកូនសោទេ។ មុខងារនេះមានប្រយោជន៍ប្រសិនបើអ្នកគ្រាន់តែចង់ទទួលនិងពិនិត្យតម្លៃអថេរបរិស្ថាន។

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.en Environment មិនត្រូវបានធ្វើបច្ចុប្បន្នភាពទេនៅពេលវាត្រូវបានកំណត់ដោយ os.putenv () ។ សម្រាប់ហេតុផលនេះវាជាការប្រសើរក្នុងការបញ្ជាក់កូនសោ (ឈ្មោះអថេរបរិស្ថាន) នៃ os.environ និងកំណត់តម្លៃដូចបង្ហាញក្នុងឧទាហរណ៍ខាងលើ។

ប្រសិនបើ putenv () ត្រូវបានគាំទ្រការចាត់តាំងទៅវត្ថុមួយនៅក្នុង os.en Environment នឹងត្រូវបានបម្លែងដោយស្វ័យប្រវត្តិទៅជាការហៅដែលត្រូវគ្នាទៅនឹង putenv () ។ នៅក្នុងការអនុវត្តការចាត់តាំងធាតុមួយនៅក្នុង os.environ គឺជាប្រតិបត្តិការដែលពេញចិត្តព្រោះការហៅដោយផ្ទាល់ទៅ putenv () នឹងមិនធ្វើឱ្យទាន់សម័យ os.environ ទេ។
os.putenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

ដូចដែលបានរៀបរាប់ខាងលើការផ្លាស់ប្តូរដែលបានធ្វើដោយការបន្ថែមឬសរសេរជាន់លើអថេរបរិស្ថានមានប្រសិទ្ធភាពតែនៅក្នុងកម្មវិធី Python ប៉ុណ្ណោះ។ វាមិនមានន័យថាអថេរបរិស្ថានប្រព័ន្ធនឹងត្រូវបានសរសេរឡើងវិញទេ។

ចំណាំថាការផ្លាស់ប្តូរតម្លៃអាចបណ្តាលឱ្យមានការលេចធ្លាយអង្គចងចាំអាស្រ័យលើប្រព័ន្ធប្រតិបត្តិការ។

ចំណាំ៖ នៅលើវេទិកាមួយចំនួនរួមទាំង FreeBSD និង Mac OS X ការផ្លាស់ប្តូរតម្លៃបរិស្ថានអាចបណ្តាលឱ្យមានការលេចធ្លាយអង្គចងចាំ។
os.putenv() — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

នេះបណ្តាលមកពីការបញ្ជាក់របស់ 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

ការលុបអថេរបរិស្ថានក៏មានប្រសិទ្ធភាពតែនៅក្នុងកម្មវិធី Python នោះដែរ។ វាមិនយកអថេរបរិស្ថានប្រព័ន្ធចេញទេ។

ឥទ្ធិពលនៃការផ្លាស់ប្តូរអថេរបរិស្ថាន

ដូចដែលខ្ញុំបានសរសេរម្តងហើយម្តងទៀតការផ្លាស់ប្តូរ (ការកំណត់ឬលុប) អថេរបរិស្ថាន 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
# 

ដើម្បីជាការពន្យល់យើងបានផ្លាស់ប្តូរអថេរបរិស្ថាន LANG នៅក្នុង os.environ ប៉ុន្តែ Python ផ្តល់នូវម៉ូឌុលមូលដ្ឋានដើម្បីគ្រប់គ្រងមូលដ្ឋាន។

ដំណើរការផ្លាស់ប្តូរដោយអថេរបរិស្ថាន

វាក៏អាចផ្លាស់ប្តូរដំណើរការទៅតាមតម្លៃនៃអថេរបរិស្ថាន។

នេះគឺជាឧទាហរណ៍នៃការផ្លាស់ប្តូរលទ្ធផលយោងតាមអថេរបរិស្ថាន 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')
# こんにちは

លើសពីនេះប្រសិនបើអថេរបរិស្ថានត្រូវបានកំណត់ដើម្បីបង្ហាញពីបរិយាកាសអភិវឌ្developmentន៍និងបរិយាកាសផលិតកម្មឧទាហរណ៍អ្នកអាចទទួលបានតម្លៃនៃអថេរទាំងនេះហើយប្តូរដំណើរការ។

Copied title and URL