से परिवर्तनीय तर्कों को कैसे पास करें मैं कुछ समय के लिए इस मुद्दे को हल करने की कोशिश कर रहा हूं। स्थिति की परत है कि मैं आ अजगर स्क्रिप्ट के मानकों भेजने के लिए एक 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 से नहीं कहा जाता है।
पुनश्च: मैं कहना है "परत"
कृपया वास्तविक बैश स्क्रिप्ट पोस्ट करें, इससे यह देखना बहुत आसान हो जाएगा कि क्या गलत है – tobyodavies
फिर आप कुछ गलत कर रहे हैं। समस्या को प्रदर्शित करने वाले न्यूनतम कोड को पोस्ट करें। –
बैश स्क्रिप्ट से कॉल करते समय पाइथन स्क्रिप्ट कुछ भी प्रिंट कर सकता है? E.G. यदि आप 'foo.py'' के शीर्ष पर 'प्रिंट "wtf" 'जोड़ते हैं, तो क्या आप उस आउटपुट को देखते हैं जब आप बैश स्क्रिप्ट चलाते हैं? – intuited