Execute a BASH command in Python-- in the same process -


मुझे कमांड को निष्पादित करने की आवश्यकता है I पायथन 2.6 में import ibm_db_dbi आयात करने से पहले / home / db2v95 / sqlib / db2profile

इससे पहले कि मैं पायथन काम करता हूं:

  बाल्डरग जिगर: ~ $ / Home / db2v95 / sqlib / db2profile baldurb @ gigur: ~ $ python पायथन 2.6.4 (r264: 75706, 7 दिसंबर 2009, 18:45:15) [जीसीसी 4.4.1] linux2 पर टाइप "सहायता", "कॉपीराइट" , अधिक जानकारी के लिए "क्रेडिट" या "लाइसेंस" & Gt; & gt; & gt; आयात ibm_db_dbi> & gt; & gt;  

लेकिन os.system ("। / Home / db2v95 / sqlib / db2profile") का उपयोग करके पायथन में निष्पादित कर रहा है या उपप्रक्रिया .पीओन ([" । / Home / db2v95 / sqlib / db2profile "]) एक त्रुटि में परिणाम मैं क्या कर रहा हूं?

संपादित करें: यह मुझे जो त्रुटि मिलती है:

  & gt; ट्रेसबैक (सबसे हाल का कॉल अंतिम): & gt; फ़ाइल "& lt; फ़ाइल & gt; .py", पंक्ति 8, इन & gt; & LT; मॉड्यूल & gt; & Gt; उपप्रक्रिया। पोपेन (["। / Home / db2v95 / sqlib / db2profile"]) & gt; फ़ाइल & gt; "/usr/lib/python2.6/subprocess.py", & gt; लाइन 621, __इनट__ & gt; में Errread, errrite) फ़ाइल "/usr/lib/python2.6/subprocess.py", & gt; लाइन 1126, में _execute_child & gt; O_serror raise: [त्रुटि 2] ऐसा कोई फ़ाइल या निर्देशिका नहीं है  

आप कॉल कर रहे हैं '।' शेल कमांड इस कमांड का अर्थ है 'इस शेल फाइल को वर्तमान प्रक्रिया में निष्पादित करें' आप श्वेत फ़ाइल को पायथन प्रक्रिया में निष्पादित नहीं कर सकते क्योंकि पायथन शेल स्क्रिप्ट interpreter नहीं है।

/ home / b2v95 / sqlib / db2profile शायद कुछ शैल पर्यावरण चर सेट करता है यदि आप इसे system () फ़ंक्शन का उपयोग करते हुए पढ़ते हैं, तो चर को केवल निष्पादित शैल में बदल दिया जाएगा और वह शेल (आपकी स्क्रिप्ट) को कॉल करने वाली प्रक्रिया में दिखाई नहीं देगा।

आप अपनी अजगर स्क्रिप्ट शुरू करने से पहले ही इस फाइल को लोड कर सकते हैं - आप एक शेल रैपर स्क्रिप्ट बना सकते हैं जो कि करता है / Home / b2v95 / sqlib / db2profile और अपनी अजगर स्क्रिप्ट निष्पादित करें।

अन्य तरीकों से यह देखना होगा कि db2profile क्या शामिल है। यदि यह केवल NAME = मान लाइनों में है, तो आप इसे अपनी अजगर स्क्रिप्ट में पार्स कर सकते हैं और प्राप्त डेटा के साथ os.environ को अपडेट कर सकते हैं। यदि स्क्रिप्ट कुछ अधिक करता है (जैसे कि मूल्य प्राप्त करने के लिए कुछ और कॉल करना) आप अजगर में पूरी स्क्रिप्ट को फिर से क्रियान्वित कर सकते हैं।

अपडेट एक विचार: अजगर में पटकथा पढ़िए, इसे पाइप करें ( Popen का उपयोग करके), स्क्रिप्ट लिखने के बाद एक ही शेल को env कमांड और आउटपुट पढ़ें। इस तरह आपको शेल में निर्धारित सभी चर मिलेंगे। अब आप चर को पढ़ सकते हैं।

ऐसा कुछ:

  shell = subprocess.Popen (["sh"], stdin = subprocess.PIPE, stdout = subprocess पीआईपीई) स्क्रिप्ट = ओपन ("/ घर / डीबी2v95 / sqlib / db2profile", "r")। Read.) शैल.स्टीडिन.लिखित (स्क्रिप्ट + "\ n") shell.stdin.write ("env \ n") Shell.stdin.close () के लिए shell.stdout में पंक्ति: name, value = line.strip ()। Split ("=", 1) os.environ [name] = value  

Comments