argparse मॉड्यूल बिना किसी तर्क के विकल्प कैसे जोड़ें?


165

मैंने एक स्क्रिप्ट का उपयोग करके बनाया है argparse

स्क्रिप्ट को एक विकल्प के रूप में कॉन्फ़िगरेशन फ़ाइल नाम लेने की आवश्यकता है, और उपयोगकर्ता यह निर्दिष्ट कर सकता है कि क्या उन्हें पूरी तरह से स्क्रिप्ट को आगे बढ़ाने की आवश्यकता है या केवल इसे अनुकरण करना है।

पारित होने के लिए आर्ग: ./script -f config_file -sया ./script -f config_file

यह -f config_file भाग के लिए ठीक है, लेकिन यह मुझसे -s के लिए दलीलें मांगता रहता है, जो कि विकल्प के रूप में है और किसी के द्वारा पालन नहीं की जानी चाहिए।

मैंने यह कोशिश की है:

parser = argparse.ArgumentParser()
parser.add_argument('-f', '--file')
#parser.add_argument('-s', '--simulate', nargs = '0')
args = parser.parse_args()
if args.file:
    config_file = args.file
if args.set_in_prod:
        simulate = True
else:
    pass

निम्नलिखित त्रुटियों के साथ:

File "/usr/local/lib/python2.6/dist-packages/argparse.py", line 2169, in _get_nargs_pattern
nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs)
TypeError: can't multiply sequence by non-int of type 'str'

और उसी के ''बजाय के साथ गलत 0

जवाबों:



97

ऐसा विकल्प बनाने के लिए जिसका कोई मूल्य नहीं है, उसे action [ या ] के डॉक्स सेट करें 'store_const', 'store_true'या 'store_false'

उदाहरण:

parser.add_argument('-s', '--simulate', action='store_true')

नमस्कार, आपके उत्तर के लिए धन्यवाद। मैंने डॉक्टर के रूप में व्याख्या करने की कोशिश की है: >>> parser.add_argument ('- foo', '-f', कार्रवाई = 'store_true') _StoreTrueAction (विकल्प_स्ट्रिंग्स = '-' foo ',' -f ']] dest = 'foo', nargs = 0, const = True, default = False, प्रकार = कोई नहीं, विकल्प = कोई नहीं, मदद = कोई नहीं, metavar = कोई नहीं) >>> parser.parse_args () Namespace (foo = False) >> > प्रिंट args.foo Traceback (सबसे हालिया कॉल अंतिम): फ़ाइल "<stdin>", पंक्ति 1, में <मॉड्यूल> विशेषता गुण: 'Namespace' ऑब्जेक्ट में कोई विशेषता नहीं है 'foo' >>> `` यह काम नहीं लगता है; मुझे नहीं पता कि असाइनमेंट के बाद मान कैसे प्राप्त करना है। मेरी सहायता करने के लिए धन्यवाद!
दर्शन

@philippe: आप बाँध करना भूल गए हैं parser.parse_args()दिए गए मान के लिए args stackoverflow.com/questions/5262702/...
JFS

@philippe: args = parser.parse_args()जैसा कि आपके पास पहले से ही आपके कोड में है। आपको बस टिप्पणी की गई लाइन को बदलना होगा और फिर आप मान को एक्सेस कर सकते हैं args.simulate
फेलिक्स क्लिंग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.