पायथन: पैठ पर्यावरण चर को संशोधित करने का स्वतंत्र मंच


89

क्या PATHपायथन का उपयोग करके प्लेटफ़ॉर्म स्वतंत्र तरीके से पर्यावरण चर को संशोधित करने का एक तरीका है ?

के समान कुछ os.path.join()?

जवाबों:


170

आपको संशोधित करने में सक्षम होना चाहिए os.environ

चूंकि os.pathsepअलग-अलग रास्तों को अलग करने के लिए चरित्र है, इसलिए आपको प्रत्येक नए पथ को जोड़ने के लिए इसका उपयोग करना चाहिए:

os.environ["PATH"] += os.pathsep + path

या, यदि सूची में जोड़ने के लिए कई रास्ते हैं:

os.environ["PATH"] += os.pathsep + os.pathsep.join(pathlist)

जैसा कि आपने उल्लेख किया है, os.path.joinप्रत्येक अलग-अलग पथ के लिए भी उपयोग किया जा सकता है जो आपको उस मामले में संलग्न करना होगा जो आपको उन्हें अलग-अलग हिस्सों से बनाना है।


PATH पर्यावरण विभाजकों के साथ क्या? ? linux - / usr / bin: / lib: ":" विंडोज़ - C: \ asdf \; C: \ Prog ...; ","
बुआ

2
@bua: क्या आप os.pathsepमेरा उल्लेख (PATH के लिए विशिष्ट) का मतलब है ?
RedGlyph

@RedGlyph हाँ, मुझे खेद है कि os.pathsep "/" और "\" है। मैंने दावा करने से पहले जांच नहीं की;)
बुआ

11
@bua: यह लगभग एक "गेटा" है os.path.sep != os.pathsep
क्रायोति

@krawyoti, bua: आह, अब मैं देख रहा हूँ ... अच्छी तरह से देखा! यह वास्तव में एक आसान गलती है :-)
RedGlyph

17

कृपया ध्यान दें कि os.environवास्तव में एक शब्दकोश नहीं है। यह एक विशेष शब्दकोश है- वस्तु की तरह जो वास्तव में सेटेनव का उपयोग करके वर्तमान प्रक्रिया में पर्यावरण चर निर्धारित करता है ।

>>> os.environ.__class__
<class os._Environ at 0x100472050>
>>> import os
>>> os.environ["HELLO"] = "WORLD"
>>> os.getenv("HELLO")
'WORLD'

इसका मतलब है कि PATH(और अन्य पर्यावरण चर) एक ही प्रक्रिया में सी कोड चलाने के लिए दिखाई देंगे

(चूंकि टिप्पणियों में प्रारूपण नहीं हो सकता है, मुझे इसे एक उत्तर में रखना होगा, लेकिन मुझे ऐसा लगता है कि यह बनाने के लिए एक महत्वपूर्ण बिंदु है। यह वास्तव में 'निर्यात' के बराबर नहीं होने के बारे में टिप्पणी पर एक टिप्पणी है ।)


6

पाइथन में पर्यावरण चर को संशोधित करने के बारे में जागरूक होने के लिए, यह है कि "निर्यात" शेल कमांड के बराबर नहीं है। वर्तमान प्रक्रिया में परिवर्तन का कोई तरीका नहीं है, केवल बाल प्रक्रियाएं हैं।


+1: यह इंगित करने के लिए कि अन्य प्रक्रियाओं को लॉन्च करने के लिए पाइथन एप्लिकेशन का उपयोग करना चाहिए os.system, जैसे आदेश , os.popenया subprocess.Popenफिर इसका उपयोग किया जाना चाहिए। अन्यथा यह बहुत ज्यादा बेकार है।
RedGlyph

14
यह सच नहीं है।
ग्लिफ ऑक्ट

4
ग्लिफ़ के कथन का स्पष्टीकरण: यह सच नहीं है क्योंकि परिवर्तनों को वर्तमान प्रक्रिया (जिसे अजगर प्रक्रिया है) में अंतःक्षिप्त किया जाता है। ओपी संभावना का मतलब है कि मूल प्रक्रिया में परिवर्तन को इंजेक्ट करने का कोई तरीका नहीं है (जो आमतौर पर एक शेल है जिसे अजगर स्क्रिप्ट से निष्पादित किया गया था)।
पोनीएर्स

4
यदि ओपी का यही अर्थ है, तो शेल में यह क्षमता नहीं है; exportएक चर को सभी बाल प्रक्रियाओं के वातावरण में कॉपी करने का कारण बनता है, लेकिन मूल प्रक्रिया पर कोई प्रभाव नहीं पड़ता है।
काइल स्ट्रैंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.