2012-08-28 13 views
168

मान लीजिए मैं निम्नलिखित argparse स्निपेट:Argparse: '--help' में डिफ़ॉल्ट मानों को शामिल करने का तरीका?

diags.cmdln_parser.add_argument('--scan-time', 
        action = 'store', 
        nargs = '?', 
        type = int, 
        default = 5, 
        help = "Wait SCAN-TIME seconds between status checks.") 

वर्तमान में, --help रिटर्न: मदद फ़ॉर्मेटर कोड पर देखना

--scan-time [SCAN_TIME] 
        Wait SCAN-TIME seconds between status checks. 
        (Default = 5) 

:

usage: connection_check.py [-h] 
          [--version] [--scan-time [SCAN_TIME]] 

      Test the reliability/uptime of a connection. 



optional arguments: 
-h, --help   show this help message and exit 
--version    show program's version number and exit 
--scan-time [SCAN_TIME] 
        Wait SCAN-TIME seconds between status checks. 

मैं की तरह कुछ पसंद करेंगे सीमित विकल्प का खुलासा किया। क्या एक समान तरीके से '--स्कैन-टाइम' के लिए डिफ़ॉल्ट मान मुद्रित करने के लिए argparse प्राप्त करने का एक चालाक तरीका है, या क्या मुझे केवल सहायता फ़ॉर्मेटर को उप-श्रेणी चाहिए?

+2

आपको [docopt] (https://github.com/docopt/docopt) में रुचि हो सकती है। मैंने फिर कभी Argparse नहीं देखा है। –

+5

@PauloScardine - भाषा में बनाया जा रहा है Argparse के लिए एक बड़ा लाभ है। – jordanm

+0

@PauloScardine: मेरे वर्तमान प्रोजेक्ट में एक गैर-मानक लाइब्रेरी को खींचना वास्तव में दर्द होगा, लेकिन मुझे यकीन है कि डॉकॉप के आउटपुट को देखना पसंद है। पारितोषिक के लिए धन्यवाद! –

उत्तर

251

उपयोग argparse.ArgumentDefaultsHelpFormatter formatter:

अन्य फ़ॉर्मेटर वर्ग उपलब्ध, ArgumentDefaultsHelpFormatter, तर्क से प्रत्येक का डिफ़ॉल्ट मान के बारे में जानकारी जोड़ देगा:

parser = argparse.ArgumentParser(
    # ... other options ... 
    formatter_class=argparse.ArgumentDefaultsHelpFormatter) 

प्रलेखन के शब्दों में।

ध्यान दें कि यह केवल उन तर्कों पर लागू होता है जिनमें टेक्स्ट को परिभाषित करने में मदद मिली है; किसी तर्क के लिए help मान के साथ, से जानकारी जोड़ने की आवश्यकता है।

अपने स्कैन समय विकल्प के लिए सटीक उत्पादन तो हो जाता है:

--scan-time [SCAN_TIME] 
         Wait SCAN-TIME seconds between status checks. 
         (default: 5) 
+5

क्या मैं नियंत्रित कर सकता हूं कि केवल एक स्पष्ट 'डिफ़ॉल्ट =' के साथ तर्क डिफ़ॉल्ट मान दिखाते हैं? चूंकि मुझे 'डिफ़ॉल्ट: कोई नहीं' ग्रंथ पसंद नहीं है। – ziyuang

+8

आप 'डिफ़ॉल्ट' को 'सुपरप्रेस' पर सेट कर सकते हैं: 'डिफ़ॉल्ट = argparse.SUPPRESS'। ध्यान दें कि उस स्थिति में नामांकन परिणाम में कोई विशेषता नहीं जोड़ा जाएगा यदि वह तर्क छोड़ा गया था, तो ['डिफ़ॉल्ट 'दस्तावेज़] (http://docs.python.org/2/library/argparse.html#default) देखें। –

+1

ध्यान दें कि आपको इसे बनाए गए प्रत्येक उपपरक्षक के लिए भी निर्दिष्ट करना होगा। – KomodoDave

117

मदद पैरामीटर के लिए '%(default)' जोड़े क्या प्रदर्शित किया जाता है को नियंत्रित करने के।

parser.add_argument("--type", default="toto", choices=["toto","titi"], 
           help = "type (default: %(default)s)") 
+4

मुझे यह विकल्प पसंद है क्योंकि मैं पहले से ही format_class = argparse.RawTestHelpFormatter का उपयोग करता था और ओओपी के साथ चारों ओर farting की तरह महसूस नहीं किया था। – mqsoh

+11

अपनी स्वरूपण स्ट्रिंग में चर 'प्रकार' को शामिल करना न भूलें - उदा। एक स्ट्रिंग के लिए '% (डिफ़ॉल्ट) एस', या अंक के लिए '% (डिफ़ॉल्ट) डी'। – strongMA

-5

पाइथन में ऑप्टपार्सर के लिए कोई डिफ़ॉल्ट नहीं है।
हालांकि, तो निम्न का उपयोग कर सकते हैं -

# show help as default 
if len(sys.argv) == 1: 
    os.system("python " + sys.argv[0] + " -h") 
    exit() 

यह -h विकल्प, और बाहर निकलने के साथ ही स्क्रिप्ट चलेंगे।
कृपया ध्यान दें - आपको इस विकल्प का उपयोग करने के लिए ओएस + सीईएस मॉड्यूल आयात करने की आवश्यकता होगी।

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