argparse feature request
Robert Kern
robert.kern at gmail.com
Fri Nov 22 16:10:24 EST 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
>>>>> like
>>>>> to see. In the help message, I'd like to automatically add the default
>>>>> values.
>>
>>>>> What I'd like to see is:
>>>>>
>>>>> --size SIZE [2000] <<< the default value is displayed
>>>>
>>>> Use formatter_class=argparse.ArgumentDefaultsHelpFormatter
>>>>
>>>>
>>>>
> http://docs.python.org/2/library/argparse#argparse.ArgumentDefaultsHelpFormatter
>>
>>> Thanks! Almost perfect. Problem is, I don't usually bother to add
>>> help='help
>>> 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
> include
> help=...
> 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.
--
Robert Kern
"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
mailing list