2010-10-17 24 views
12

से परिवर्तनीय तर्कों को कैसे पास करें मैं कुछ समय के लिए इस मुद्दे को हल करने की कोशिश कर रहा हूं। स्थिति की परत है कि मैं आ अजगर स्क्रिप्ट के मानकों भेजने के लिए एक bash स्क्रिप्ट का उपयोग कर रहा है:बैश स्क्रिप्ट से पाइथन स्क्रिप्ट

उदाहरण: बार:

foo.sh bar.py कॉल .... कॉल की तरह दिखता है। py $ var1 $ var2 ... $ varn

पायथन स्क्रिप्ट sys.argv सरणी का उपयोग करके सभी तर्कों को प्रिंट करता है। पायथन स्क्रिप्ट कमांड लाइन से सही तरीके से काम करती है, लेकिन जब बैश स्क्रिप्ट (i.e foo.sh) से कॉल किया जाता है, तो मुझे bar.py से कोई आउटपुट नहीं मिलता है।

इसके अलावा, मैंने "#!/Bin/bash -x" विकल्प के साथ foo.sh शुरू किया और आउटपुट को भी देखा।

संक्षेप में प्रस्तुत करने:

  • दो लिपियों, foo.sh और bar.py
  • foo.sh bar.py कहता है, तर्कों के रूप foo.sh की चर गुजर
  • बार bar.py को .py तर्क यह sys.argv
  • bar.py काम करता है जब अपनी ही टर्मिनल से चलाने का उपयोग कर देखता प्रिंट, जब foo.sh

से कहा जाता है काम नहीं करता है किसी भी मदद करेंगे भयानक!!!!

धन्यवाद!

संपादित करें: हाय सब, उत्तर के लिए धन्यवाद, पूरा कोड बहुत लंबा है ... लेकिन ... दो लिपियों की सामग्री

foo.sh अभिव्यक्त किया जा सकता _ __ _

#!/bin/bash 
declare -a list1; 
declare -a list2; 

list1=("foo" "bar" "please"); 
list2=("foo" "bar" "please" "help"); 

declare -a joined; 

joined=($(bar.py "${list1[@]}" "${list2[@]}")); 

bar.py _ __ _

#!/bin/python 
import sys 

for arg in sys.argv: 
    print arg 

जैसा कि मुझे लगता है कि पाइथन में सभी इंडेंट सही हैं (सुनिश्चित नहीं है कि स्टैक ओवरफ्लो यह कैसे करता है :))। ये दोनों मेरे पास होने वाले मुद्दे के मूल का प्रतिनिधित्व करते हैं। जैसा कि कहा गया है, bar.py तर्क सही ढंग से प्रिंट करता है, जब इसे foo.sh से नहीं कहा जाता है।

पुनश्च: मैं कहना है "परत"

+1

कृपया वास्तविक बैश स्क्रिप्ट पोस्ट करें, इससे यह देखना बहुत आसान हो जाएगा कि क्या गलत है – tobyodavies

+2

फिर आप कुछ गलत कर रहे हैं। समस्या को प्रदर्शित करने वाले न्यूनतम कोड को पोस्ट करें। –

+0

बैश स्क्रिप्ट से कॉल करते समय पाइथन स्क्रिप्ट कुछ भी प्रिंट कर सकता है? E.G. यदि आप 'foo.py'' के शीर्ष पर 'प्रिंट "wtf" 'जोड़ते हैं, तो क्या आप उस आउटपुट को देखते हैं जब आप बैश स्क्रिप्ट चलाते हैं? – intuited

उत्तर

6

संपादित करें, के बाद से कोड

नियुक्त किया गया है आपका कोड सही बात कर रही है - कि आपके bar.py स्क्रिप्ट से उत्पादन सरणी joined में कब्जा कर लिया जा रहा है को छोड़कर। चूंकि ऐसा लगता है कि आप joined की सामग्री को प्रिंट नहीं कर रहे हैं, तो आप कभी भी कोई आउटपुट नहीं देखते हैं।

फ़ाइल pybash.sh

#!/bin/bash 

declare -a list1 
declare -a list2 

list1=("Hello" "there" "honey") 
list2=("More" "strings" "here") 

declare -a joined 

joined=($(./pytest.py ${list1[@]} ${list2[@]})) 
echo ${joined[@]} 

फ़ाइल pytest.py

#!/usr/bin/python 

import sys 

for i in sys.argv: 
    print "hi" 

यह 'हाय' तार का एक समूह का प्रिंट आउट अगर आप bash स्क्रिप्ट चलाने:

यहाँ एक प्रदर्शन है।

+0

@birryee, हां स्क्रिप्ट में + x अनुमतियां हैं ... सुनिश्चित नहीं है कि पहला प्रश्न क्या पूछ रहा है ... – certifiedNoob

-2

मतलब था मैं काफी सटीक सेटअप है कि आप का वर्णन कर रहे हैं, और यह कि मेरे बैश स्क्रिप्ट दिखाई देता है:

VAR1=... 
VAR2=... 
VAR3=... 

python my_script.py $VAR1 $VAR2 $VAR3 
1

संपादित करें:

मैं यह पता लगा, मैं पात्रों में से कुछ weired कॉम्बो था, लाइन ठीक से छोड़ा नहीं गया था। मैं इसे से

var = ($ (कुछ आदेश))

var = (कुछ आदेश) में बदल // बैकटिक का उपयोग कर (अभी भी बहुत संपादक सीखने .. ।)

बैश भागने कुछ सवारी लॉल है! उत्तर देने वालों के लिए, आपकी सभी मदद के लिए धन्यवाद

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