How to Customize the New 2.7 ArgumentParser Library Class (module argparse)?

Peter Otten __peter__ at web.de
Fri Aug 20 16:19:42 EDT 2010


Tom Browder wrote:

> I have converted from OptionParser to ArgumentParser (new in version
> 2.7) to great advantage, and I think it's a great improvement!  But
> now I want to customize the help formatting just a bit.
> 
> The documentation is sketchy here, but I started by subclassing
> ArgumentParser and attempted to redefine format_usage, but after
> looking at the detailed instructions with pydoc I see "the API of the
> formatter objects is still considered an implementation detail."
> 
> I take that to mean I should abandon such efforts at the moment.
> 
> So, using the defined class as is, and following instructions in the
> online docs, I have been able to get my output to look like this:
> 
> ==============>
> $ test_argparser.py -h
> usage: test_argparser.py [options]
> 
> A program to manipulate user programs.
> 
> optional arguments:
>   -h, --help      Show this help message and exit.
>   -v, --version  Show program's version number and exit.
>   -s, --show     Show a list of user post-processing programs.
> 
> Version 2010-08-20.01
> <==============
> 
> To beautify things I would like to change two strings which are
> auto-generated by the standard parser:
> 
> 1.  change "usage:"
> 
> to  "Usage:"   # capitalize 'usage'
> 
> 2.  change "optional arguments:"
> 
> to "Optional arguments:"  # capitalize 'Optional'
> 
> Does anyone know how to do it without modifying source code?

You can use internationalization via

http://docs.python.org/library/gettext.html

or take a shortcut:

$ cat tmp.py
lookup = {
    "usage: ": "Usage: ",
    "optional arguments": "Optional arguments"}

def gettext(s):
    return lookup.get(s, s)

import argparse
argparse._ = gettext

if __name__ == "__main__":
    p = argparse.ArgumentParser()
    p.parse_args()

$ python tmp.py -h
Usage: tmp.py [-h]

Optional arguments:
  -h, --help  show this help message and exit

Peter



More information about the Python-list mailing list