Changing The Metavar Value In Argparse Only In Argument Listing And Not In Its Usage
Solution 1:
For a fast solution you can just set backspace character to a metavar.
p.add_argument('-i', '--ini', help="use alternate ini file", metavar='\b')
It will get you this:
optional arguments:
-h, --help show this help message and exit
If you want this:
-i, --ini INI use alternate ini file
You will have to modify help formatter. Answered here python argparse help message, disable metavar for short options?
Solution 2:
https://stackoverflow.com/a/9643162/901925 and https://stackoverflow.com/a/23941599/901925 and https://stackoverflow.com/a/16969505/901925
give a HelpFormatter._format_action_invocation(self, action)
method modification that replaces '-i INI, --ini INI'
with '-i, --ini INI'
.
'-h, --help'
doesn't have the CAPS string because help does not take an argument. The INI
is just a place holder for that argument. The original just tries to be clear, you can use either -i 124
or --ini 124
The METAVAR
parameter gives you control over that place holder, but it is used both in formatting the usage and the help.
If you don't want to go the custom HelpFormatter class route, you could still use the custom usage method. For example at some point during development, do usage = parser.format_usage()
. Now change the parser so the metavar
is ''
, and the usage is this new one.
parser = argparse.ArgumentParser()
a1 = parser.add_argument('-f','--foo',help='<foo> argument')
a2 = parser.add_argument('-b','--bar',metavar='CUSTOM',help='<CUSTOM> argunent')
a3 = parser.add_argument('-z','--baz', action='store_true', help='no argument')
usage = parser.format_usage()
parser.usage=usage # grab original usagefor a in [a1,a2]:
a.metavar=''# 'blank' out the metavars that matter
parser.print_help()
produces:
usage: usage: stack30704631.py [-h] [-f FOO] [-b CUSTOM] [-z]
optional arguments:
-h, --help show this help message and exit
-f , --foo <foo> argument
-b , --bar <CUSTOM> argunent
-z, --baz no argument
Post a Comment for "Changing The Metavar Value In Argparse Only In Argument Listing And Not In Its Usage"