argparse feature request
robert.kern at gmail.com
Fri Nov 22 22:10:24 CET 2013
On 2013-11-22 18:15, Neal Becker wrote:
> Robert Kern wrote:
>> On 2013-11-22 16:52, Neal Becker wrote:
>>> Robert Kern wrote:
>>>> On 2013-11-22 14:56, Neal Becker wrote:
>>>>> I use arparse all the time and find it serves my needs well. One thing I'd
>>>>> to see. In the help message, I'd like to automatically add the default
>>>>> What I'd like to see is:
>>>>> --size SIZE  <<< the default value is displayed
>>>> Use formatter_class=argparse.ArgumentDefaultsHelpFormatter
>>> Thanks! Almost perfect. Problem is, I don't usually bother to add
>>> me' options. It seems that ArgumentDefaultsHelpFormatter doesn't do anything
>>> unless help='blah' option is used. Not sure what to do about that. Since
>>> python test_freq3.py -h
>>> produces useful messages without my adding help=... everywhere, it'd be nice
>>> if ArgumentDefaultsHelpFormatter would work here.
>> Patches are welcome, I am sure. Implement a HelpFormatter that does what you
>> want. _format_action() is where the relevant logic is. Try something like
>> this, and modify to suit.
>> class BeckerDefaultFormatter(argparse.ArgumentDefaultsHelpFormatter):
>> def _format_action(self, action):
>> monkeypatched = False
>> if action.default is not None and action.help is None:
>> # Trick the default _format_action() method into writing out
>> # the defaults.
>> action.help = ' '
>> monkeypatched = True
>> formatted = super(BeckerDefaultFormatter,
>> self)._format_action(action) if monkeypatched:
>> action.help = None
>> return formatted
> Thanks! Seems to work great. It gave reasonable output for both case where I
> and also without.
> I have no idea how that above code works, but I guess as long as it works...
Just take a look at the implementation of HelpFormatter._format_action() and
look for where my monkeypatch would change the logic. It took me just a few
minutes to figure out how to do it in the first place. There really isn't
anything tricky going on.
"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco
More information about the Python-list