2010-01-22 7 views
12

से फ़ंक्शन रिटर्न मान का उपयोग करके खोल चर के लिए मान असाइन करना मेरे पास एक पायथन फ़ंक्शन, fooPy() है जो कुछ मान देता है। (int/double या string)पाइथन

मैं इस मान का उपयोग करना चाहता हूं और इसे एक खोल स्क्रिप्ट में असाइन करना चाहता हूं। उदाहरण के लिए पाइथन फ़ंक्शन निम्न है:

def fooPy(): 
    return "some string" 
    #return 10 .. alternatively, it can be an int 

fooPy() 

शैल स्क्रिप्ट में मैंने निम्नलिखित चीजों को आजमाया लेकिन उनमें से कोई भी काम नहीं करता।

fooShell = python fooPy.py 
#fooShell = $(python fooPy.py) 
#fooShell = echo "$(python fooPy.py)" 

उत्तर

32

आप इस तरह, पायथन में अपने मूल्य मुद्रित कर सकते हैं:

print fooPy() 

और अपने खोल स्क्रिप्ट में:

fooShell=$(python fooPy.py) 

खोल में = के साथ स्पेस छोड़ने के लिए नहीं सुनिश्चित करें स्क्रिप्ट।

+1

धन्यवाद, यह काम किया! मैंने चारों ओर रिक्त स्थान डालने से भी गलती की है। तो भी तय है। – cppb

+0

+1 का उल्लेख करने के लिए +1 "सुनिश्चित करें कि शेल स्क्रिप्ट में = चारों ओर रिक्त स्थान न छोड़ें" यह मेरे जैसे रूकीज़ से नरक को परेशान करता है। Sys.stdout.write() के बारे में एक विस्तृत उत्तर और नोट्स के लिए –

10

आपके पायथन कोड में, आपको परिणाम प्रिंट करने की आवश्यकता है।

import sys 
def fooPy(): 
    return 10 # or whatever 

if __name__ == '__main__': 
    sys.stdout.write("%s\n", fooPy()) 

फिर खोल में, आप कर सकते हैं:

fooShell=$(python fooPy.py) # note no space around the '=' 

ध्यान दें कि मैं अजगर कोड में कोई if __name__ == '__main__' जाँच कहा, यह सुनिश्चित करें कि मुद्रण केवल किया जाता है जब अपने कार्यक्रम से चलाया जाता है बनाने के लिए कमांड लाइन, जब आप इसे पायथन दुभाषिया से आयात नहीं करते हैं।

मैं भी print के बजाय sys.stdout.write() इस्तेमाल किया, :-) क्योंकि

  • print "वास्तविक कार्यक्रमों" में अजगर 2 और अजगर 3,
  • में अलग व्यवहार है, एक print के बजाय sys.stdout.write() वैसे भी उपयोग करना चाहिए
+0

+ 1 यह उपयोगी है। धन्यवाद! – cppb

+0

शानदार। समाप्ति कोड प्राप्त करने के तरीके को इंगित करने के लिए मैं वास्तव में –

3

आप fooPy द्वारा दिए गए मान print चाहिए। खोल प्रतिस्थापन stdout से पढ़ता है। print fooPy() के साथ अपने प्रोग्राम की अंतिम पंक्ति को बदलें और फिर आपके द्वारा उल्लिखित दूसरी शैल पाइपलाइन का उपयोग करें। यह काम करना चाहिए।

5

यदि आप पायथन sys.exit कथन से मूल्य चाहते हैं, तो यह खोल विशेष चर $? में होगा।

$ var=$(foo.py) 
$ returnval=$? 
$ echo $var 
Some string 
$ echo returnval 
10 
+0

+1 की तलाश कर रहा था ... लेकिन मुझे एक छोटी सी जानकारी ठीक करने दें। – fortran

+0

फिक्स के लिए धन्यवाद (ऐसे कई भाषाओं में काम करने के खतरे हैं)। –

+0

हम्म .. यह "प्रिंट वापसी_वॉल" कॉल अनावश्यक बनाता है (अभी तक प्रयास नहीं किया गया है)। धन्यवाद, यह उपयोगी जानकारी है। +1। – cppb