2016-03-07 7 views
15

अनुकूलित करें मैंने अपनी समस्या का प्रदर्शन करने के लिए निम्न नमूना कोड लिखा है।argparse सहायता संदेश

import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument('-v', '--version', action='version', 
        version='%(prog)s 1.0') 
parser.parse_args() 

यह निम्नलिखित सहायता संदेश उत्पन्न करता है।

$ python foo.py --help 
usage: foo.py [-h] [-v] 

optional arguments: 
    -h, --help  show this help message and exit 
    -v, --version show program's version number and exit 

मैं इस सहायता आउटपुट को कस्टमाइज़ करना चाहता हूं जैसे कि यह सभी वाक्यांशों और वाक्यों को कैपिटल करता है, और वाक्यों के बाद अवधि देता है। दूसरे शब्दों में, मैं इस तरह से मदद संदेश उत्पन्न करना चाहता हूं।

$ python foo.py --help 
Usage: foo.py [-h] [-v] 

Optional arguments: 
    -h, --help  Show this help message and exit. 
    -v, --version Show program's version number and exit. 

क्या ऐसा कुछ है जिसे मैं argparse API का उपयोग करके नियंत्रित कर सकता हूं। यदि हां, तो कैसे? क्या आप कृपया एक छोटा सा उदाहरण प्रदान कर सकते हैं जो दिखाता है कि यह कैसे किया जा सकता है?

+0

आप [ 'help'] सेटिंग की कोशिश की है (कस्टम तर्क समूहों के साथ है https://docs.python.org/3/library/argparse.html# मदद)? – jonrsharpe

+0

ओह, मैं देखता हूं - फिर आप 'add_help' को 'गलत' पर सेट कर सकते हैं और इसे मैन्युअल रूप से कर सकते हैं। लेकिन इन चीजों के लिए लोअरकेस सम्मेलन है। – jonrsharpe

उत्तर

14

सबसे पहले: उन वाक्यांशों को कैपिटल करना सम्मेलन के चेहरे पर उड़ता है, और argparse वास्तव में इन तारों को आसानी से बदलने में आपकी सहायता करने के लिए टूल नहीं किया जाता है। आपके यहां तारों के तीन अलग-अलग वर्ग हैं: सहायता फ़ॉर्मेटर, अनुभाग शीर्षक से बॉयलरप्लेट टेक्स्ट, और विशिष्ट विकल्प प्रति पाठ सहायता करें। ये सभी तार स्थानीय हैं; आप gettext() module support के माध्यम से इन सभी तारों के लिए केवल 'पूंजीकृत' अनुवाद प्रदान कर सकते हैं। उस ने कहा, यदि आप पर्याप्त निर्धारित हैं और read the source code a little हैं तो आप इन सभी तारों तक पहुंच सकते हैं और प्रतिस्थापित कर सकते हैं।

version कार्रवाई में एक डिफ़ॉल्ट help टेक्स्ट शामिल है, लेकिन आप help तर्क सेट करके अपना स्वयं का आपूर्ति कर सकते हैं। यह help कार्रवाई पर लागू होता है; False अगर आप add_help argument सेट आपको लगता है कि कार्रवाई मैन्युअल रूप से जोड़ सकते हैं:

parser = argparse.ArgumentParser(add_help=False) 

parser.add_argument('-v', '--version', action='version', 
        version='%(prog)s 1.0', help="Show program's version number and exit.") 
parser.add_argument('-h', '--help', action='help', default=argparse.SUPPRESS, 
        help='Show this help message and exit.') 

इसके बाद, optional arguments संदेश एक समूह शीर्षक है; प्रत्येक पार्सर में दो डिफ़ॉल्ट समूह होते हैं, एक स्थितित्मक तर्क के लिए, दूसरा वैकल्पिक के लिए। ,

parser._positionals.title = 'Positional arguments' 
parser._optionals.title = 'Optional arguments' 

चेतावनी दी हो, तक पहुँचने के नाम एक अंडरस्कोर आप मॉड्यूल के गैर-दस्तावेजी निजी एपीआई में venturing रहे हैं के साथ शुरू करने से: आप गुण _positionals और _optionals, जो दोनों के एक title विशेषता द्वारा इन तक पहुँच सकते हैं और भविष्य में अपडेट में आपका कोड टूट सकता है।

अंत में, usage स्ट्रिंग को बदलने के लिए, आपको सहायता फ़ॉर्मेटर को उपclass करना होगा; ,

class CapitalisedHelpFormatter(argparse.HelpFormatter): 
    def add_usage(self, usage, actions, groups, prefix=None): 
     if prefix is None: 
      prefix = 'Usage: ' 
     return super(CapitalisedHelpFormatter, self).add_usage(
      usage, actions, groups, prefix) 

parser = argparse.ArgumentParser(formatter_class=CapitalisedHelpFormatter) 

डेमो इन सभी को एक साथ डाल: में formatter_class argument रूप उपवर्ग पारित

>>> import argparse 
>>> class CapitalisedHelpFormatter(argparse.HelpFormatter): 
...  def add_usage(self, usage, actions, groups, prefix=None): 
...   if prefix is None: 
...    prefix = 'Usage: ' 
...   return super(CapitalisedHelpFormatter, self).add_usage(
...    usage, actions, groups, prefix) 
... 
>>> parser = argparse.ArgumentParser(add_help=False, formatter_class=CapitalisedHelpFormatter) 
>>> parser._positionals.title = 'Positional arguments' 
>>> parser._optionals.title = 'Optional arguments' 
>>> parser.add_argument('-v', '--version', action='version', 
...      version='%(prog)s 1.0', help="Show program's version number and exit.") 
_VersionAction(option_strings=['-v', '--version'], dest='version', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help="Show program's version number and exit.", metavar=None) 
>>> parser.add_argument('-h', '--help', action='help', default=argparse.SUPPRESS, 
...      help='Show this help message and exit.') 
_HelpAction(option_strings=['-h', '--help'], dest='help', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help='Show this help message and exit.', metavar=None) 
>>> print(parser.format_help()) 
Usage: [-v] [-h] 

Optional arguments: 
    -v, --version Show program's version number and exit. 
    -h, --help  Show this help message and exit. 
+0

यह अभी भी सभी उपयोगों में "उपयोग:" और "वैकल्पिक तर्क:" प्रिंट करता है। मैं सबकुछ कैपिटल कैसे कर सकता हूं? –

+3

@LoneLearner: इस बिंदु पर आपको वास्तव में खुद से पूछना होगा कि यह इसके लायक है; उन मानों को कोडबेस में कहीं और हार्डकोड किया जाता है। अगर कुछ भी किया जा सकता है तो मुझे एक नज़र आएगी, लेकिन इसकी सीमाएं शायद हैं। –

2

Martijn जो मन में आया था फिक्स की एक जोड़ी देना है - help पैरामीटर प्रदान करने, और एक कस्टम फॉर्मेटर वर्ग।

एक अन्य आंशिक फ़िक्स तर्क बनाने के बाद सहायता स्ट्रिंग को संशोधित करना है। add_argument एक Action ऑब्जेक्ट बनाता है और देता है जिसमें पैरामीटर और डिफ़ॉल्ट होते हैं। आप इसके लिए एक लिंक सहेज सकते हैं, और Action संशोधित कर सकते हैं। आप उन कार्यों की एक सूची भी प्राप्त कर सकते हैं, और उस पर कार्य कर सकते हैं।

मुझे उदाहरण देकर स्पष्ट करना, डिफ़ॉल्ट और एक अन्य तर्क के साथ एक सरल पार्सर के लिए करते हैं, कार्रवाई सूची है:

In [1064]: parser._actions 
Out[1064]: 
[_HelpAction(option_strings=['-h', '--help'], dest='help', nargs=0, const=None, default='==SUPPRESS==', type=None, choices=None, help='show this help message and exit', metavar=None), 
_StoreAction(option_strings=['-f', '--foo'], dest='foo', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)] 

मैं देख सकते हैं और इनमें से किसी भी की help विशेषता संशोधित कर सकते हैं:

In [1065]: parser._actions[0].help 
Out[1065]: 'show this help message and exit' 
In [1066]: parser._actions[0].help='Show this help message and exit.' 

In [1067]: parser.parse_args(['-h']) 
usage: ipython3 [-h] [-f FOO]  
optional arguments: 
    -h, --help   Show this help message and exit. 
    -f FOO, --foo FOO 

का उपयोग करना:

इस मदद का निर्माणसूची एक 'निजी' विशेषता का उपयोग करती है, जो कुछ लोग मूर्खतापूर्ण मानते हैं। लेकिन पायथन में कि सार्वजनिक/निजी भेद कस नहीं है, और देखभाल के साथ तोड़ दिया जा सकता है। मार्टिजन parser._positionals.title तक पहुंच कर ऐसा कर रहा है।

कि समूह शीर्षक बदलने के लिए एक और तरीका है

ogroup=parser.add_argument_group('Correct Optionals Title') 
ogroup.add_argument('-v',...) 
ogroup.add_argument('-h',...)