2013-01-15 26 views
7

पर बैश तर्क पास करें मैं एक बैश स्क्रिप्ट बनाने की कोशिश कर रहा हूं जो एक पायथन लिपि पर अपना तर्क देता है। मैं इसे इस तरह काम करना चाहता हूं।पाइथन लिपि

अगर मैं इस रूप में चलाते हैं:

script.sh latest 

फिर बैश स्क्रिप्ट के भीतर इसे इस तरह "नवीनतम" तर्क के साथ एक अजगर स्क्रिप्ट चलाने:

python script.py latest 

इसी तरह अगर बैश स्क्रिप्ट है 123 के साथ तर्क के साथ पाइथन लिपि के साथ चलाएं:

python script.py 123 

क्या कोई मुझे समझने में मदद कर सकता है कृपया इसे पूरा करने के लिए?

+1

आपने अभी तक क्या प्रयास किया है? बैश स्क्रिप्ट में तर्कों का उपयोग करना और उपयोग करना किसी भी सभ्य ट्यूटोरियल का हिस्सा है। – StoryTeller

उत्तर

26

इस मामले में यह चाल है कि आपके पास कई तर्क हैं, जिनमें कोई भी मामला नहीं है, और मूल कमांड लाइन पर मौजूद किसी भी समूह को संरक्षित करना है।

तो, आप इन तीन मामलों काम करना चाहता हूँ:

script.sh      # no args 
script.sh how now    # some number 
script.sh "how now" "brown cow" # args that need to stay quoted 

वास्तव में कारण है कि शेल मेक्रो लेंग्वेज है यह करने के लिए एक प्राकृतिक तरीका नहीं है, इसलिए वे कुछ जादू वाक्य रचना जोड़ दिया है कि होगा बस डीटीआरटी।

#!/bin/sh 

python script.py "[email protected]" 
1

बैश में, स्क्रिप्ट के लिए पारित तर्क $# अंकन के साथ पहुँचा जाता (# एक संख्या है। वास्तव में उस तरह $ # का उपयोग करके आप पारित कर दिया आर्ग की संख्या देना चाहिए)। तो अगर आप तर्क पारित करने के लिए चाहता था: स्क्रिप्ट के भीतर

`#script.sh argument` 

:

स्क्रिप्ट कॉलिंग

python script.py "$1" 
+2

व्हाइटस्पेस –

+0

संरक्षित करने के लिए '$ 1" उद्धरण की आवश्यकता है धन्यवाद @glennjackman मैंने भविष्य के आगंतुकों के लिए कोड अपडेट किया है। – Grambot

6

pythonscript script.py उपयोग getopt.getopt(args, options[, long_options]) में बहस के लिए।

उदाहरण:

import getopt, sys 

def main(): 
    try: 
     opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="]) 
    except getopt.GetoptError as err: 
     # print help information and exit: 
     print str(err) # will print something like "option -a not recognized" 
     usage() 
     sys.exit(2) 
    output = None 
    verbose = False 
    for o, a in opts: 
     if o == "-v": 
      verbose = True 
     elif o in ("-h", "--help"): 
      usage() 
      sys.exit() 
     elif o in ("-o", "--output"): 
      output = a 
     else: 
      assert False, "unhandled option" 
    # ... 

if __name__ == "__main__": 
    main() 
2

एक बहुत goo buit में पार्सर argparse है। यो इसका उपयोग निम्नानुसार कर सकते हैं:

import argparse 

    parser = argparse.ArgumentParser(description='Process some integers.') 
    parser.add_argument('integers', metavar='N', type=int, nargs='+', 
        help='an integer for the accumulator') 
    parser.add_argument('--sum', dest='accumulate', action='store_const', 
        const=sum, default=max, 
        help='sum the integers (default: find the max)') 

    args = parser.parse_args() 
    print(args.accumulate(args.integers))