मेरे पास एक शेल स्क्रिप्ट है जो कुछ क्रेडेंशियल निर्यात करती है।

BHUKRK848D:~ ranip.hore$ cat cred.ksh
export ORACLE_UID_MD="abcd"
export ORACLE_PWD_MD="welcome"

मैं सबप्रोसेस का उपयोग करके एक अजगर स्क्रिप्ट से शेल स्क्रिप्ट को निष्पादित करने का प्रयास कर रहा हूं और अजगर स्क्रिप्ट से os.environ का उपयोग करके निर्यात किए गए चर प्राप्त करने का प्रयास कर रहा हूं, मैं उन्हें पुनर्प्राप्त करने में असमर्थ हूं।

नीचे कोड स्निपेट है जिसे मैं निष्पादित कर रहा हूं:

BHUKRK848D:~ ranip.hore$ cat demo.py
import os
import subprocess
subprocess.call("sh cred.ksh",shell=True)
print(os.environ.get("ORACLE_UID_MD",None))

BHUKRK848D:~ ranip.hore$ python demo.py 
None

क्या यह इस कारण से है कि चर एक अलग प्रक्रिया में निर्यात किए जाते हैं और स्क्रिप्ट से इसे लाने के दौरान कुछ अलग प्रक्रिया से प्रयास किया जा रहा है? अगर मैं टर्मिनल से मैन्युअल रूप से निर्यात कमांड निष्पादित करता हूं और पायथन कमांड चलाता हूं तो यह प्रमाण-पत्र लाने में सक्षम होता है।

3
raniphore 23 अक्टूबर 2018, 14:16

1 उत्तर

सबसे बढ़िया उत्तर

पर्यावरण चर उपप्रक्रिया द्वारा नीचे की ओर विरासत में मिले हैं, लेकिन यह मूल प्रक्रिया में ऊपर की ओर प्रचारित नहीं होता है। उपप्रक्रिया में पर्यावरण चर सेट करना मूल प्रक्रिया के पर्यावरण चर को प्रभावित नहीं करता है।

आपको इसे निष्पादित करने के बजाय फ़ाइल से पर्यावरण चर को पार्स करना होगा।

2
Lie Ryan 23 अक्टूबर 2018, 18:12