ఎన్విరాన్మెంట్ వేరియబుల్స్ను తిరిగి పొందవచ్చు, తనిఖీ చేయవచ్చు, సెట్ చేయవచ్చు (జోడించబడ్డాయి లేదా తిరిగి వ్రాయబడతాయి) మరియు పైథాన్ ప్రోగ్రామ్లలో os.environ ఉపయోగించి తొలగించబడతాయి. పర్యావరణ వేరియబుల్స్ సెట్ చేయడం లేదా తొలగించడం ద్వారా చేసిన మార్పులు పైథాన్ ప్రోగ్రామ్లో మాత్రమే ప్రభావవంతంగా ఉంటాయని గమనించండి. సిస్టమ్ ఎన్విరాన్మెంట్ వేరియబుల్స్ తిరిగి వ్రాయబడతాయని దీని అర్థం కాదు.
కింది సమాచారం ఇక్కడ అందించబడింది.
os.environ
- పర్యావరణ వేరియబుల్స్ పొందండి.
- పర్యావరణ వేరియబుల్స్ సెట్ చేయండి (జోడించండి/ఓవర్రైట్ చేయండి)
- పర్యావరణ వేరియబుల్స్ తొలగించండి
- మారుతున్న పర్యావరణ వేరియబుల్స్ ప్రభావం
- పర్యావరణ వేరియబుల్స్ ద్వారా ప్రక్రియలను మార్చడం
OS మాడ్యూల్ని దిగుమతి చేయండి మరియు ఉపయోగించండి. ఇది ప్రామాణిక లైబ్రరీ కాబట్టి, అదనపు ఇన్స్టాలేషన్ అవసరం లేదు. ఉప ప్రాసెస్ మాడ్యూల్ కూడా ప్రామాణిక లైబ్రరీలో చేర్చబడింది.
import os
import subprocess
os. పర్యావరణం
Os.environ రకం os._Environ.
print(type(os.environ))
# <class 'os._Environ'>
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 () కూడా అందించబడింది. నిఘంటువు యొక్క గెట్ () పద్ధతి వలె, కీ లేకపోతే అది డిఫాల్ట్ విలువను అందిస్తుంది. మీరు ఎన్విరాన్మెంట్ వేరియబుల్ విలువను పొందాలనుకుంటే మరియు తనిఖీ చేయాలనుకుంటే ఈ ఫంక్షన్ ఉపయోగపడుతుంది.
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)
పర్యావరణ వేరియబుల్స్ తొలగించండి
ఎన్విరాన్మెంట్ వేరియబుల్ను తొలగించడానికి, os.environ యొక్క పాప్ () పద్ధతిని లేదా డెల్ స్టేట్మెంట్ని ఉపయోగించండి. నిఘంటువు వలెనే.
కిందిది పాప్ () యొక్క ఉదాహరణ.
పాప్ () తొలగించబడిన పర్యావరణ వేరియబుల్ విలువను అందిస్తుంది. డిఫాల్ట్గా, ఉనికిలో లేని ఎన్విరాన్మెంట్ వేరియబుల్ని పేర్కొనడం వల్ల లోపం (కీఎర్రర్) ఏర్పడుతుంది, కానీ రెండవ ఆర్గ్యుమెంట్ పేర్కొంటే ఎన్విరాన్మెంట్ వేరియబుల్ లేకపోతే అది విలువను అందిస్తుంది.
print(os.environ.pop('NEW_KEY'))
# 100
# print(os.environ.pop('NEW_KEY'))
# KeyError: 'NEW_KEY'
print(os.environ.pop('NEW_KEY', None))
# None
కిందిది డెల్ యొక్క ఉదాహరణ.
పర్యావరణ వేరియబుల్ మళ్లీ జోడించబడింది, ఆపై తొలగించబడుతుంది. ఎన్విరాన్మెంట్ వేరియబుల్ ఉనికిలో లేకపోతే, ఒక లోపం (కీఎర్రర్).
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.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
#
వివరణ కొరకు, మేము 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')
# こんにちは
అదనంగా, పర్యావరణ వేరియబుల్స్ అభివృద్ధి వాతావరణం మరియు ఉత్పత్తి వాతావరణాన్ని సూచించడానికి సెట్ చేయబడితే, ఉదాహరణకు, మీరు ఈ వేరియబుల్స్ విలువలను పొందవచ్చు మరియు ప్రక్రియను మార్చవచ్చు.