2013-09-25 12 views
5

यह मेरी स्क्रिप्टअजगर आदेश पंक्ति तर्क, छोड़ स्क्रिप्ट नाम

def main(argv): 
if len(sys.argv)>1: 
    for x in sys.argv: 
     build(x) 

if __name__ == "__main__": 
    main(sys.argv) 

तो कमांड लाइन से है मैं लिखने python myscript.py commandlineargument

मैं इसे myscript.py को छोड़ और बस commandlineargument(n)

के माध्यम से commandlineargument चलाना चाहते हैं

इसलिए मैं समझता हूं कि मेरे लूप के लिए यह जिम्मेदार नहीं है, लेकिन मैं इसे कैसे कर सकता हूं? यदि आप केवल एक स्क्रिप्ट पैरामीटर हो सकता है,

def main(argv): 
    for x in argv[1:]: 
     build(x) 

if __name__ == "__main__": 
    main(sys.argv) 

लेकिन, सिर्फ सूचकांक द्वारा इसे पाने:

+1

यदि 'मुख्य' फ़ंक्शन 'argv' पैरामीटर लेता है, तो संभवतः इसे उस पैरामीटर को _use_ करना चाहिए, इसे अनदेखा करने और इसके बजाय 'sys.argv' का उपयोग करना ... – abarnert

+0

इसके अलावा, आपको' if' चेक 'की आवश्यकता नहीं है सब। यदि कोई तर्क नहीं है, तो लूप सफलतापूर्वक 0 बार चलाएगा, इसलिए ऐसा करने दें। – abarnert

+0

@abarnert मेरे पास एक और – CQM

उत्तर

14

sys.argv के बाद से एक सूची है, तो आप sys.argv[1:] टुकड़ा करने की क्रिया का उपयोग कर सकते sys.argv[1]। लेकिन, आप की जाँच करनी चाहिए अगर sys.argv की लंबाई 1 से अधिक है और उदाहरण के लिए, यदि ऐसा नहीं होता है एक त्रुटि फेंक:

def main(argv): 
    if len(argv) == 1: 
     print "Not enough arguments" 
     return 
    else: 
     build(argv[1]) 

if __name__ == "__main__": 
    main(sys.argv) 
2

असली जवाब हालांकि, के बारे में जानने के लिए और argparse उपयोग करने के लिए है।

+0

है, मैंने पहले इसका उपयोग किया है, इसके और sys.argv के बीच क्या फायदा है या कुछ और बनाम ऑप्टरसे का उपयोग कर – CQM

+0

यह तर्क है कि जब तक आपको 'क्लिफ' की आवश्यकता न हो)। यह एक महान एपीआई है। इसे 'optparse' की तरह बहिष्कृत नहीं किया गया है। यह आपकी स्क्रिप्ट के रूप + अनुभव को मानकीकृत करता है। – jhermann

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