python - पायथन में पर्यावरण चर सेट करने के लिए कैसे




environment-variables (6)

मुझे पायथन स्क्रिप्ट में कुछ पर्यावरण चर सेट करने की आवश्यकता है और मैं उन सभी अन्य स्क्रिप्ट्स को चाहता हूं जिन्हें पायथन (शैल स्क्रिप्ट) से बुलाया जाता है जो पर्यावरण चर सेट को देखने के लिए बाल प्रक्रिया होगी। मान एक संख्या है।

अगर मैं os.environ["DEBUSSY"] = 1 करता हूं, तो यह कहता है कि 1 को स्ट्रिंग होना है। मैं यह भी जानना चाहता हूं कि एक बार जब मैं इसे सेट करता हूं तो पाइथन (स्क्रिप्ट के बाद के हिस्से में) में पर्यावरण चर को कैसे पढ़ा जाए।


अगर मैं os.environ ["DEBUSSY"] = 1 करता हूं, तो यह कहता है कि 1 को स्ट्रिंग होना है।

फिर करो

os.environ["DEBUSSY"] = "1"

मैं यह भी जानना चाहता हूं कि एक बार जब मैं इसे सेट करता हूं तो पाइथन (स्क्रिप्ट के बाद के हिस्से में) में पर्यावरण चर को कैसे पढ़ा जाए।

बस के रूप में os.environ["DEBUSSY"] उपयोग करें

some_value = os.environ["DEBUSSY"]

आप अपने पर्यावरण चरों तक पहुंचने के लिए os.environ वातावरण शब्दकोश का उपयोग कर सकते हैं।

अब, मेरी एक समस्या यह थी कि अगर मैंने बैच फ़ाइल चलाने के लिए os.system का उपयोग करने का os.system किया जो आपके पर्यावरण चर सेट करता है (** ** बैट * फ़ाइल में एसईटी कमांड का उपयोग करके) यह वास्तव में उन्हें आपके पायथन पर्यावरण के लिए सेट नहीं करेगा (लेकिन os.system फ़ंक्शन के साथ बनाई गई बाल प्रक्रिया के लिए)। वास्तव में पाइथन पर्यावरण में सेट चर को प्राप्त करने के लिए, मैं इस स्क्रिप्ट का उपयोग करता हूं:

import re
import system
import os

def setEnvBat(batFilePath, verbose = False):
    SetEnvPattern = re.compile("set (\w+)(?:=)(.*)$", re.MULTILINE)
    SetEnvFile = open(batFilePath, "r")
    SetEnvText = SetEnvFile.read()
    SetEnvMatchList = re.findall(SetEnvPattern, SetEnvText)

    for SetEnvMatch in SetEnvMatchList:
        VarName=SetEnvMatch[0]
        VarValue=SetEnvMatch[1]
        if verbose:
            print "%s=%s"%(VarName,VarValue)
        os.environ[VarName]=VarValue

आपको पर्यावरण चर के लिए स्ट्रिंग मान असाइन करना चाहिए।

os.environ["DEBUSSY"] = "1"

यदि आप पर्यावरण चर को पढ़ना या प्रिंट करना चाहते हैं तो बस उपयोग करें

print os.environ["DEBUSSY"]

यह परिवर्तन केवल उस प्रक्रिया के लिए प्रभावी होंगे जहां इसे असाइन किया गया था, यह मूल्य को स्थायी रूप से नहीं बदलेगा। बाल प्रक्रियाएं स्वचालित रूप से मूल प्रक्रिया के पर्यावरण का उत्तराधिकारी बन जाएंगी।


जब आप पर्यावरण चर के साथ खेलते हैं (चर जोड़ें / संशोधित / हटाएं), एक अच्छा अभ्यास पिछले राज्य को कार्य पूर्ण करने पर पुनर्स्थापित करना है।

पर्यावरण चर को पुनर्स्थापित करने question लिए आपको इस question में modified_environ संदर्भ प्रबंधक की तरह कुछ की आवश्यकता हो सकती है।

क्लासिक उपयोग:

with modified_environ(DEBUSSY="1"):
    call_my_function()

os.environ एक पायथन शब्दकोश की तरह व्यवहार करता है, इसलिए सभी सामान्य शब्दकोश संचालन किए जा सकते हैं। अन्य उत्तरों में उल्लिखित set और set ऑपरेशंस के अलावा, हम यह भी जांच सकते हैं कि कोई कुंजी मौजूद है या नहीं:

>>> import os
>>> os.environ.has_key('HOME')  # Check an existing env. variable
True
>>> os.environ.has_key('FOO')   # Check for a non existing variable
False
>>> os.environ['FOO'] = '1'     # Set a new env. variable (String value)
>>> os.environ.has_key('FOO')
True
>>> os.environ.get('FOO')       # Retrieve the value
'1'

मैंने हाल ही में एक मुद्दे में भाग लिया था और पता लगाया है कि अगर आपकी पाइथन स्क्रिप्ट चल रही है, तो आपके पास पर्यावरण को अपडेट करने वाली अन्य स्क्रिप्ट हैं, os.environ फिर से कॉल करना नवीनतम मानों को प्रतिबिंबित नहीं करेगा

docs.python.org/2/library/os.html#os.environ से उद्धरण:

ओएस मॉड्यूल आयात होने पर पहली बार यह मैपिंग कैप्चर की जाती है, आमतौर पर पाइथन स्टार्टअप के दौरान साइट.py प्रोसेसिंग के हिस्से के रूप में। इस समय के बाद किए गए पर्यावरण में परिवर्तन os.en वातावरण में प्रतिबिंबित नहीं होते हैं, os.environ को सीधे संशोधित करके किए गए परिवर्तनों को छोड़कर।

os.environ.data जो सभी पर्यावरण चर को संग्रहीत करता है, एक dict ऑब्जेक्ट है, जिसमें सभी पर्यावरण मान होते हैं:

>>> type(os.environ.data)
<type 'dict'>

os.environ["DEBUSSY"] = '1' बारे में क्या? पर्यावरण चर हमेशा तार होते हैं।







environment-variables