2013-08-20 7 views
12

मैं सीखने के लिए argparse.ArgumentParser काम करता है की कोशिश की है और मुझे लगता है कि के लिए एक जोड़े को पंक्तियां लिखें कर दिया है:argparse.ArgumentParser विधि का उपयोग कर अजगर

global firstProduct 
global secondProduct 
myparser=argparse.ArgumentParser(description='parser test') 
myparser.add_argument("product1",help="enter product1",dest='product_1') 
myparser.add_argument("product2",help="enter product2",dest='product_2') 

args=myparser.parse_args() 

firstProduct=args.product_1 
secondProduct=args.product_2 

जब उपयोगकर्ता 2 मानकों के साथ इस स्क्रिप्ट को चलाने मैं सिर्फ इतना है कि करना चाहते हैं मेरे कोड क्रमश: firstProduct और secondProduct पर असाइन करें। हालांकि यह काम नहीं करता है। क्या कोई मुझे बताने के लिए है? अग्रिम धन्यवाद

+2

आपको त्रुटि का वर्णन करना चाहिए, न केवल 'यह काम नहीं करता' कहता है। त्रुटि संदेश: "ValueError: स्थितित्मक तर्क के लिए दो बार आपूर्ति की गई dest" महत्वपूर्ण है। unutbu का जवाब उस पते को संबोधित करता है। – hpaulj

उत्तर

11

स्थितित्मक तर्क का उपयोग करते समय dest पैरामीटर को छोड़ दें। नाम स्थितीय तर्क के लिए आपूर्ति तर्क का नाम होगा:

import argparse 
myparser = argparse.ArgumentParser(description='parser test') 
myparser.add_argument("product_1", help="enter product1") 
myparser.add_argument("product_2", help="enter product2") 

args = myparser.parse_args() 
firstProduct = args.product_1 
secondProduct = args.product_2 
print(firstProduct, secondProduct) 

% test.py foo bar प्रिंट

('foo', 'bar') 
+0

बहुत बहुत धन्यवाद। यहां 2 और सवाल हैं। 1) डबल quates या एकल अलग के साथ product_1 लिखना? 2) स्थितित्मक तर्क और दूसरों के बीच क्या अंतर है? – caesar

+2

'dest' पैरामीटर' विकल्प 'के साथ उपयोग किया जा सकता है ('-' से शुरू होने वाले) – hpaulj

+2

(1) परिणाम में कोई अंतर नहीं है यदि आप एकल उद्धरण या डबल कोट्स के साथ तार निर्दिष्ट करते हैं। दोनों विकल्प होने के कारण उद्धरण उद्धरणों के साथ आसानी से मदद मिलती है: '' '' '' या '' '' 'उदाहरण के लिए। (2) जब' add_argument' का पहला तर्क '-' या' --' के साथ शुरू होता है, तो यह एक है वैकल्पिक तर्क। डैश के बिना, यह एक स्थिति तर्क है। स्थितित्मक तर्क उनकी स्थिति द्वारा पहचाने जाते हैं: 'test.py foo bar' पहली स्थिति में foo को व्याख्या करता है, इसलिए यह पहले स्थितित्मक तर्क से जुड़ा हुआ है, 'product_1' – unutbu

6

unutbu's answer के अलावा चल रहा है, आप भी आदेश गंतव्य बनाने के लिए metavar विशेषता का उपयोग कर सकते हैं परिवर्तनीय और वेरिएबल नाम जो सहायता मेनू में दिखाई देता है, जैसा कि this link में दिखाया गया है।

उदाहरण यदि आप के लिए:

myparser.add_argument("firstProduct", metavar = "product_1", help = "enter product1") 

आप args.firstProduct में तर्क आप के लिए उपलब्ध है, लेकिन यह मदद में product_1 के रूप में सूचीबद्ध होगा।

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