मेरे पास एक छोटा पायथन एप्लिकेशन है, जिसे subprocess.Popen
के माध्यम से लॉन्च किया गया है, जो पर्यावरण चर के रूप में कुछ पैरामीटर लेता है। मैं पर्यावरण संरचना को Popen
कॉल में पास करके ऐसा करता हूं। कार्यक्रम os.getenv
के माध्यम से चर को पढ़ता है।os.environ ['foo'] कब os.getenv ('foo') से मेल नहीं खाता होगा?
या इसके बजाय, यह उन्हें इस तरह से पढ़ता था। विंडोज़ पर, यह ठीक काम किया। लेकिन हमारे FreeBSD सर्वर, os.getenv
रिटर्न सभी मापदंडों हम में पारित के लिए None
। पर अजीब बात यह है कि os.environ
, मूल्यों ठीक — और है वास्तव में, बस सिर्फ दोनों प्लेटफार्मों पर ठीक os.environ['foo']
बनाया सब कुछ काम करने के लिए सभी os.getenv('foo')
कॉल स्विचिंग है ।
ये मान अलग क्यों हैं? एक दूसरे पर कब उपयुक्त है?
विंडोज 10 पर, 'os.putenv (' abc ',' 123 ')' काम नहीं किया, यानी, नया चर सेट नहीं है। हालांकि, 'os.environ [' abc '] =' 123'' काम करता है और बाद में 'os.getenv (' abc ')' काम करता है। –
@arvindpdmn एक और परीक्षा के बाद, ऐसा इसलिए है क्योंकि 'putenv()' वास्तव में पर्यावरण चर को 'os.en वातावरण' में संग्रहीत नहीं करता है; बल्कि, 'पर्यावरण .__ setitem __() 'कॉल' putenv()' और स्थानीय रूप से डेटा स्टोर करता है, और न तो 'getenv()' और न ही वातावरण '। get getemem __()' वास्तव में पर्यावरण को स्वयं पूछताछ करता है, वे जो कुछ भी ओएस से काम करते हैं । वातावरण 'संग्रहित किया गया है। इसे लागू करने के लिए काफी भ्रमित तरीका है। – JAB