பைத்தானில் (os.environ) சுற்றுச்சூழல் மாறிகளைப் பெறுதல், சேர்த்தல், மேலெழுதும் மற்றும் நீக்குதல்

வணிக

சுற்றுச்சூழல் மாறிகளை மீட்டெடுக்கலாம், சரிபார்க்கலாம், அமைக்கலாம் (சேர்க்கலாம் அல்லது மேலெழுதலாம்) மற்றும் பைதான் நிரல்களில் os.environ ஐ பயன்படுத்தி நீக்கலாம். சுற்றுச்சூழல் மாறிகளை அமைப்பதன் மூலம் அல்லது நீக்குவதன் மூலம் செய்யப்பட்ட மாற்றங்கள் பைதான் திட்டத்தில் மட்டுமே செயல்படும் என்பதை நினைவில் கொள்க. கணினி சூழல் மாறிகள் மீண்டும் எழுதப்படும் என்று இது அர்த்தப்படுத்துவதில்லை.

பின்வரும் தகவல்கள் இங்கே கொடுக்கப்பட்டுள்ளன.

  • os.environ
  • சுற்றுச்சூழல் மாறிகள் கிடைக்கும்.
  • சூழல் மாறிகள் அமை (சேர்க்க/மேலெழுத)
  • சுற்றுச்சூழல் மாறிகளை அகற்றவும்
  • மாறிவரும் சுற்றுச்சூழல் மாறிகளின் விளைவு
  • சுற்றுச்சூழல் மாறிகள் மூலம் செயல்முறைகளை மாற்றுதல்

OS தொகுதியை இறக்குமதி செய்து பயன்படுத்தவும். இது ஒரு நிலையான நூலகம் என்பதால், கூடுதல் நிறுவல் தேவையில்லை. துணை செயலாக்க தொகுதி நிலையான நூலகத்தில் சேர்க்கப்பட்டுள்ளது.

import os
import subprocess

சுற்றுச்சூழல்

Os.en Environ ன் வகை os._Environ.

print(type(os.environ))
# <class 'os._Environ'>

os._ சுற்றுச்சூழல் என்பது ஒரு ஜோடி விசை மற்றும் மதிப்பு கொண்ட ஒரு வரைபட வகை பொருள் ஆகும், மேலும் அகராதி (டிக்ட் வகை) போன்ற அதே முறைகளைக் கொண்டுள்ளது. சூழல் மாறி பெயர் முக்கியமானது, அதன் மதிப்பு மதிப்பு.

OS தொகுதி இறக்குமதி செய்யப்படும் போது os.en Environ ன் உள்ளடக்கங்கள் ஏற்றப்படும். நிரல் இயங்கும் போது கணினி சூழல் மாறிகள் வேறு வழிகளில் மாற்றப்பட்டாலும் 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 () செயல்பாடும் வழங்கப்படுகிறது. அகராதியின் கெட் () முறையைப் போலவே, விசை இல்லையென்றால் அது இயல்புநிலை மதிப்பை வழங்கும். நீங்கள் ஒரு சூழல் மாறியின் மதிப்பைப் பெற்று சரிபார்க்க விரும்பினால் இந்த செயல்பாடு பயனுள்ளதாக இருக்கும்.

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 ஐப் பொறுத்து மதிப்பை மாற்றுவது நினைவக கசிவை ஏற்படுத்தும் என்பதை நினைவில் கொள்க.

குறிப்பு: FreeBSD மற்றும் Mac OS X உள்ளிட்ட சில தளங்களில், சூழலின் மதிப்பை மாற்றுவது நினைவக கசிவை ஏற்படுத்தலாம்.
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

பின்வருபவை டெல் ஒரு உதாரணம்.

சூழல் மாறி மீண்டும் சேர்க்கப்பட்டு, பின்னர் நீக்கப்படும். சூழல் மாறி இல்லை என்றால், ஒரு பிழை (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 இன் மதிப்பு புதுப்பிக்கப்படாது. எனவே, os.environ இன் முக்கிய (சூழல் மாறி பெயர்) குறிப்பிட்டு மேலே உள்ள எடுத்துக்காட்டில் காட்டப்பட்டுள்ளபடி அதை நீக்குவது விரும்பத்தக்கது.

Unsetenv () ஆதரிக்கப்பட்டால், os.environ இல் ஒரு உருப்படியை நீக்குவது தானாகவே தொடர்புடைய அழைப்புக்கு unsetenv () க்கு மொழிபெயர்க்கப்படும். நடைமுறையில், os.environ இல் உருப்படிகளை நீக்குவது விருப்பமான செயலாகும், ஏனெனில் unsetenv () க்கு நேரடி அழைப்புகள் os.environ ஐ புதுப்பிக்காது.
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')
# こんにちは

கூடுதலாக, சுற்றுச்சூழல் மாறிகள் வளர்ச்சி சூழல் மற்றும் உற்பத்தி சூழலைக் குறிக்க அமைக்கப்பட்டால், எடுத்துக்காட்டாக, நீங்கள் இந்த மாறிகளின் மதிப்புகளைப் பெற்று செயல்முறையை மாற்றலாம்.