2012-08-17 10 views
7

मैं कमांड लाइन इंटरफ़ेस में टाइप किए गए पैरामीटर पार्स करने के लिए पायथन में argparse मॉड्यूल का उपयोग कर रहा हूं।पायथन Argparse: मेटावर और एक्शन = store_true एक साथ

Traceback (most recent call last): 
    File "./scripts/tp4", line 94, in <module> 
    main() 
    File "./scripts/tp4", line 74, in main 
    modloader.loadModules(sub_parsers) 
    File "/usr/lib/python2.6/site-packages/tp4/cli/Moduleloader.py", line 66, in loadModules 
    registered_modules[module_name].setSubparserArgs(module_sub_parser) 
    File "/usr/lib/python2.6/site-packages/tp4/cli/modules/AutotestModule.py", line 135, in setSubparserArgs 
    action='store_true', default=False, required=False) 
    File "/usr/share/tp4/cli/zip/argparse.zip/argparse.py", line 1302, in add_argument 
    TypeError: __init__() got an unexpected keyword argument 'metavar' 

अगर मैं कार्रवाई या metavar पैरामीटर निकाल, यह काम करता है: मैं इस त्रुटि मिलती है

submit_parser.add_argument('-pv','--provision',metavar='PROVISION', dest='PROVISION', 
           help='provision system', 
           action='store_true', default=False, required=False) 

: मैं एक subparser वस्तु के लिए निम्न add_argument फोन है। दोनों एक साथ क्यों नहीं हो सकते हैं? http://docs.python.org/dev/library/argparse.html पर Argparse दस्तावेज़ में इस प्रतिबंध के बारे में कुछ भी नहीं है। किसी भी मदद

+0

पायथन संस्करण .... जांचना एक महत्वपूर्ण बात है .... – avasal

+0

आपने यह नहीं पूछा है, लेकिन यदि 'action'' store_true 'है, तो डिफ़ॉल्ट मान पहले से ही' गलत 'है (और यदि कार्रवाई 'store_false' 'डिफ़ॉल्ट मान 'True' है)। यह काफी सुविधाजनक है, हालांकि 'optparse' से अलग है (जहां दोनों मामलों में डिफ़ॉल्ट' कोई नहीं 'है)। – torek

उत्तर

13

एक metavar केवल स्थितीय तर्क के लिए कोई मतलब (कमांड लाइन के अंत में फ़ाइल नाम लगता है) बनाता है के लिए या के लिए पहले से

धन्यवाद एक बहस का अपना तर्क (जैसे --input-files foo.txt bar.txt) लेता है जब।

आपका --provision तर्क एक ध्वज है क्योंकि आपने action को store_true पर सेट किया है। यह कोई तर्क नहीं लेता है (यानी, nargs सेट नहीं है)। इस प्रकार, मेटावायर होने का अर्थ नहीं है।

the argparse documentation से:

When ArgumentParser generates help messages, it need some way to refer to each expected argument. By default, ArgumentParser objects use the dest value as the “name” of each object. By default, for positional argument actions, the dest value is used directly, and for optional argument actions, the dest value is uppercased. So, a single positional argument with dest='bar' will be referred to as bar. A single optional argument --foo that should be followed by a single command-line argument will be referred to as FOO.

+3

स्पष्टीकरण के लिए धन्यवाद। हालांकि, यह जानकारी argparse दस्तावेज़ में स्पष्ट नहीं है। –

+3

स्पैस पायथन डॉक्स के लिए, मैं हमेशा अपने उत्तर PYMOTW वेबसाइट से प्राप्त कर रहा हूं, http://pymotw.com/2/argparse/ – qneill

+2

मैं 'मेटावार =' का उपयोग कर रहा था जब मैं वास्तव में चाहता था 'dest = '। – aldo

-2

@pwc से एक जवाब निकालने के लिए, आपको dest बजाय metavar उपयोग करने के लिए की जरूरत है।

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