argparse feature request

Robert Kern robert.kern at
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
>>>>> 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
>>> 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 -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 is None:
>>               # Trick the default _format_action() method into writing out
>>               # the defaults.
>>      = ' '
>>               monkeypatched = True
>>           formatted = super(BeckerDefaultFormatter,
>>           self)._format_action(action) if monkeypatched:
>>      = 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