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