2010-03-08 11 views
9

से पायथन मॉड्यूल आयात करना मैं लिनक्स के तहत कमांड लाइन (बैश) से एक पायथन लिपि लॉन्च कर रहा हूं। मुझे पाइथन खोलने, मॉड्यूल आयात करने की आवश्यकता है, और उसके बाद कोड की रेखाएं व्याख्या की गई हैं। कंसोल तब पाइथन में रहना चाहिए (इसे छोड़ना नहीं)। मैं उसको कैसे करू?बैश

मैं इस तरह एक उपनाम की कोशिश की है:

alias program="cd /home/myname/programs/; python; import module; line_of_code" 

लेकिन यह केवल अजगर शुरू होता है और आदेश निष्पादित नहीं की जाती हैं (मॉड्यूल आयात, इलाज किया कोड का कोई लाइन)।

ऐसा करने का सही तरीका क्या है, बशर्ते मुझे स्क्रिप्ट निष्पादित होने के बाद पाइथन को खोलने (इसे छोड़ने) की आवश्यकता न हो? बहुत धन्यवाद!

उत्तर

5

एक आसान तरीका है यह करने के लिए "कोड" मॉड्यूल के साथ है: जब code.interact() कहा जाता है

python -c "import code; code.interact(local=locals())" 

यह एक इंटरैक्टिव खोल में आप छोड़ देंगे । localinteract पर कीवर्ड तर्क का उपयोग किए गए दुभाषिया के लिए डिफ़ॉल्ट नामस्थान को पूर्ववत करने के लिए किया जाता है; हम locals() का उपयोग करेंगे, जो एक बिल्टिन फ़ंक्शन है जो स्थानीय नामस्थान को शब्दकोश के रूप में देता है।

python -c "import mymodule, code; code.interact(local=locals())" 

जो आप एक दुभाषिया सही वातावरण है कि में चला जाता है:

आपका आदेश कुछ इस तरह दिखेगा।

+0

यह केवल आधा रास्ते काम करता है। मैंने अपना आयात मॉड्यूल जोड़ा, या तो 'आयात कोड' के पहले या बाद में, लेकिन जब इंटरैक्टिव पायथन कंसोल में, मेरा मॉड्यूल उपलब्ध नहीं है। – Morlock

+1

मुझे लगता है कि कोड मॉड्यूल आप जो चाहते हैं वह कर सकता है, लेकिन आपको पर्यावरण को बूटस्ट्रैप करना होगा: पायथन-सी "आयात sys, कोड; code.interact (स्थानीय = स्थानीय())" यह मुझे कमांड पर छोड़ देता है खोल जो मुझे करने देता है: >>> प्रिंट sys.argv [0] क्या आप इसे करने की कोशिश कर रहे हैं? –

+0

बढ़िया! यह मेरे लिए नौकरी करता है। मेरा अपना मॉड्यूल अब भी लोड हो गया है (आयात sys, कोड, mymodule; ...) चीयर्स – Morlock

3

उदाहरण:

python -c "import time ; print 'waiting 2 sec.'; time.sleep(2); print 'finished' " 
+1

@Karol Thx, लेकिन मैं कंसोल में अजगर के भीतर ही रहना चाहिए, क्योंकि यह एक इंटरैक्टिव स्क्रिप्ट है। मैंने इसे जोड़ने के लिए सवाल संपादित किया। – Morlock

+1

यदि आपको 'भीतर' पायथन बने रहने की आवश्यकता है, तो '-i' ध्वज के साथ दुभाषिया शुरू करें। – ChristopheD

+0

मैंने -i (सी के साथ या बिना) के साथ प्रयास किया लेकिन मुझे एक मिलता है: 'पायथन: फ़ाइल' आयात मॉड्यूल 'नहीं खोल सकता: [Errno 2] ऐसी कोई फ़ाइल या निर्देशिका' – Morlock

6

उपयोग एक सबरूटीन बजाय उर्फ ​​

callmyprogram(){ 
    python -i -c "import time;print time.localtime()" 
} 
callmyprogram 
+0

@ ghostdog74 मैं पहले कभी एक सबराउटिन का उपयोग नहीं करता हूं। मैं इसे कहां रखूं? .bashrc फ़ाइल में? (.bash_bashrc क्योंकि मैं लिनक्स मिंट का उपयोग कर रहा हूं) फिर मैं इसे कैसे लॉन्च करूं? धन्यवाद। – Morlock

+0

आप इसे किसी भी स्क्रिप्ट में डाल सकते हैं। चूंकि आपके पास '.bash_bashrc' है, तो आप इसे वहां डाल सकते हैं। यदि आप subroutine का उपयोग करना चाहते हैं, तो '-i' और '-c' के संयोजन के लिए बस' स्रोत .bash_bashrc' – ghostdog74

+0

+ करें, जो ओपी की समस्या हल करता है। किसी फ़ंक्शन में कुछ डालने से कभी दर्द नहीं होता है (अतिरिक्त लचीलापन के लिए), _an उपनाम समान रूप से अच्छी तरह से काम करेगा। बैश शब्दावली पर एक नोट: 'subroutine' को _shell functions_ और _sourced scripts_ दोनों के लिए छतरी शब्द के रूप में उपयोग किया जाता है; इसलिए, यह एक _ [खोल] function_ को कॉल करना बेहतर है। – mklement0