2011-12-19 15 views
11

मैं एक स्क्रिप्ट स्क्रिप्ट से पाइथन फ़ंक्शन को कॉल करने का तरीका जानने का प्रयास कर रहा हूं।शैल स्क्रिप्ट से एक पायथन फ़ंक्शन को कॉल करना

मेरे पास एकाधिक कार्यों के साथ एक पायथन फ़ाइल है और मुझे अपनी खोल स्क्रिप्ट में उनके द्वारा लौटाए गए मानों का उपयोग करने की आवश्यकता है। क्या इसे करने का कोई तरीका है।

मैं पाइथन का उपयोग करके कॉन्फ़िगरेशन फ़ाइल पढ़ने और खोल में मान प्राप्त करने के लिए ऐसा कर रहा हूं। क्या इसे हासिल करने का कोई और बेहतर तरीका है।

test.py शामिल हैं:

import ConfigParser 

config = ConfigParser.ConfigParser() 
config.read("test.conf") 

def get_foo(): 
    return config.get("locations", "foo") 

def get_bar(): 
    return config.get("locations", "bar") 

मैं मान एक खोल चर में अजगर कार्यों द्वारा वापस स्टोर करने के लिए की जरूरत है।

+3

आप जिस समस्या का समाधान करने की कोशिश कर रहे हैं? कॉन्फ़िगर के साथ स्क्रिप्ट का उपयोग क्यों नहीं करते हैं शैल स्क्रिप्ट का काम करते हैं? वैकल्पिक रूप से, खोल से कॉन्फ़िगर क्यों नहीं पढ़ते? मुझे लगता है कि समस्या दो फाइलों में इसे तोड़ने के लिए पर्याप्त जटिल है। –

उत्तर

22

आप अजगर दुभाषिया पूछ परिणाम मुद्रित करने के लिए द्वारा मानक आउटपुट में अपने कार्यों के परिणामों से भेज सकते हैं:

python -c 'import test; print test.get_foo()' 

-c विकल्प बस अजगर कुछ अजगर आदेश पर अमल करने के लिए कहता है।

आदेश एक चर में परिणाम की दुकान के लिए, आपको इसलिए कर सकते हैं:

RESULT_FOO=`python -c 'import test; print test.get_foo()'` 

या, समतुल्य रूप

RESULT=$(python -c 'import test; print test.get_foo()') 

बैकटिक के बाद से और $(…) एक आदेश का मूल्यांकन करने और इसके उत्पादन से बदलें।

पीएस: प्रत्येक फ़ंक्शन के परिणाम प्राप्त करने के लिए प्रत्येक बार कॉन्फ़िगरेशन फ़ाइल को इस दृष्टिकोण के साथ पार्स करने की आवश्यकता होती है। कुछ इस तरह के साथ, एक ही बार में सभी परिणाम लौटने द्वारा अनुकूलित किया जा सकता है:

ALL_RESULTS=$(python -c 'import test; print test.get_foo(), test.get_bar()') 

परिणाम तो विभाजित है और

RESULT_BAR=$(echo $ALL_RESULTS | cut -d' ' -f2) 

जो दूसरा परिणाम लेता है के साथ अलग अलग चर में रखा जा सकता और इसे RESULT_BAR में उदाहरण के लिए रखता है (और इसी प्रकार: -fn परिणाम # एन के लिए)।

पी पी एस: पाब्लो Maurin उल्लेख किया है, यह शायद एक भी दुभाषिया में सब कुछ करना आसान होगा (अजगर, लेकिन शायद यह भी खोल), यदि संभव हो तो, बजाय एक कार्यक्रम में चर की गणना और उन्हें किसी अन्य रूप में उपयोग करने का एक।

+0

या अन्य पायथन स्क्रिप्ट पर आउटपुट भेजने का प्रयास करें और इसे चलाएं। – sum2000

+0

अच्छा लग रहा है .. यह काम किया .. मैं सोच रहा था। इस मामले में .. कॉन्फ़िगरेशन फ़ाइल से n पैरामीटर को पढ़ने के लिए मुझे उपरोक्त रेखा को खोल से एन बार कॉल करने की आवश्यकता है जो configparser का उपयोग करके पाइथन में कई बार पढ़ना समाप्त कर देगा। क्या मैं कर सकता हूं कोई और बेहतर तरीका है? –

+1

@saddy: उदाहरण के लिए आप दोनों परिणामों को एकसाथ प्रिंट कर सकते हैं, और फिर उन्हें विभाजित करने के लिए यूनिक्स उपयोगिताओं का उपयोग करें: 'RESULT = $ (आयात परीक्षण; print test.get_foo(), test.get_bar()) ', और फिर' कट का उपयोग करें ',' sed' (?), या 'awk' (?) परिणाम के प्रत्येक भाग को बदले में निकालने के लिए: 'RESULT2 = $ ($ RESULT | cut -d '' -f 2 गूंजें) 'आपके' get_bar() ', आदि देता है – EOL

संबंधित मुद्दे