आवरण वर्ग
यह सबसे अधिक विश्वसनीय और DRY दृष्टिकोण है जो मैंने अब तक दोनों डिफॉल्ट को दिखाने के लिए पाया है और एक argparse.RawTextHelpFormatter
ही समय में इस तरह के रूप में एक और फॉर्मैटर का उपयोग करता है:
#!/usr/bin/env python3
import argparse
class ArgumentParserWithDefaults(argparse.ArgumentParser):
def add_argument(self, *args, help=None, default=None, **kwargs):
if help is not None:
kwargs['help'] = help
if default is not None and args[0] != '-h':
kwargs['default'] = default
if help is not None:
kwargs['help'] += ' Default: {}'.format(default)
super().add_argument(*args, **kwargs)
parser = ArgumentParserWithDefaults(
formatter_class=argparse.RawTextHelpFormatter
)
parser.add_argument('-a', default=13, help='''my help
for a''')
parser.add_argument('-b', default=42, help='''my help
for b''')
parser.add_argument('--no-default', help='''my help
for no-default''')
parser.add_argument('--no-help', default=101)
parser.print_help()
print()
print(parser.parse_args())
आउटपुट:
usage: main.py [-h] [-a A] [-b B] [--no-default NO_DEFAULT]
[--no-help NO_HELP]
optional arguments:
-h, --help show this help message and exit
-a A my help
for a Default: 13
-b B my help
for b Default: 42
--no-default NO_DEFAULT
my help
for no-default
--no-help NO_HELP
Namespace(a=13, b=42, no_default=None, no_help=101)
ArgumentDefaultsHelpFormatter
+ RawTextHelpFormatter
कई विरासत
एकाधिक वंशानुक्रम बस काम करता है, लेकिन यह सार्वजनिक एपीआई नहीं लगता है:
#!/usr/bin/env python3
import argparse
class RawTextArgumentDefaultsHelpFormatter(
argparse.ArgumentDefaultsHelpFormatter,
argparse.RawTextHelpFormatter
):
pass
parser = argparse.ArgumentParser(
formatter_class=RawTextArgumentDefaultsHelpFormatter
)
parser.add_argument('-a', default=13, help='''my help
for a''')
parser.add_argument('-b', default=42, help='''my help
for b''')
parser.print_help()
आउटपुट:
usage: a.py [-h] [-a A] [-b B]
optional arguments:
-h, --help show this help message and exit
-a A my help
for a (default: 13)
-b B my help
for b (default: 42)
यह सिर्फ इसलिए काम करता है क्योंकि जैसा कि हम https://github.com/python/cpython/blob/v3.6.5/Lib/argparse.py#L648 स्रोतों से देख सकते हैं :
RawTextHelpFormatter
औजार _split_lines
ArgumentDefaultsHelpFormatter
औजार _get_help_string
इसलिए हम अनुमान लगा सकते हैं कि वे ठीक काम करेंगे।
हालाँकि, यह सार्वजनिक API नहीं लगता है, और न ही इसके तरीके हैं formatter_class
, इसलिए मुझे नहीं लगता कि वर्तमान में इसे करने के लिए कोई सार्वजनिक API तरीका है। argparse
डॉकस्ट्रिंग कहते हैं:
इस मॉड्यूल में अन्य सभी वर्गों को कार्यान्वयन विवरण माना जाता है। (यह भी ध्यान दें कि HelpFormatter और RawDescriptionHelpFormatter को केवल सार्वजनिक नामों के रूप में सार्वजनिक माना जाता है - फ़ॉर्मेटर ऑब्जेक्ट्स की API को अभी भी कार्यान्वयन विवरण माना जाता है।)
इसे भी देखें: मदद संदेश को अनुकूलित करें
पायथन 3.6.5 पर परीक्षण किया गया।