Optparse and help formatting?
Steven Bethard
steven.bethard at gmail.com
Sun Sep 30 03:01:32 EDT 2007
Tim Chase wrote:
> I've been learning the ropes of the optparse module and have been
> having some trouble getting the help to format the way I want.
>
> I want to specify parts of an option's help as multiline.
> However, the optparse formatter seems to eat newlines despite my
> inability to find anything in optparse.py that does something
> obvious like .replace("\n", " ") to eat the newlines I stick in
> the help. It also seems to mung tabs. An example from my code:
>
> parser.add_option("-x", "--extended",
> action="callback",
> callback=callback_test,
> type="string", # required to get metavar to show in help
> dest="test",
> metavar="CONF",
> help="a comma-separated list of options.\n"
> "s=[YYYY]MMDD,n=NAME,c=COLOR\n"
> "s,start=[YYYY]MMDD\n"
> "\tstart day of period (default, current day)\n"
> ...
> )
>
> which would accept options that looked something like
>
> test.py -x s=20070401,n=XR71,c=black
>
> (my callback_test breaks apart parser.rargs[0] to deal with the
> funky params).
>
> However, when I display the help, its reformatting eats the
> newlines in my help-string and strangely looks like it converts
> my tabs to spaces.
>
> Any hints on how to either work around the problem or fix it?
I guess this is just an optparse-y week on c.l.py. ;-) Ben Finney
pointed you in the right direction for optparse.
If you care to try out argparse (http://argparse.python-hosting.com/)
which has a similar API, it has a builtin RawTextHelpFormatter formatter
class::
import argparse
def my_type(string):
# split string and turn it into appropriate object(s)
return 'foo(%s)' % string
parser = argparse.ArgumentParser(
formatter_class=argparse.RawTextHelpFormatter
)
parser.add_argument(
"-x", "--extended",
type=my_type, dest="test", metavar="CONF",
help="a comma-separated list of options.\n"
"s=[YYYY]MMDD,n=NAME,c=COLOR\n"
"s,start=[YYYY]MMDD\n"
"\tstart day of period (default, current day)\n"
)
args = parser.parse_args()
print args.test
This program will produce output like::
$ python script.py -x sdfsdfas
foo(sdfsdfas)
$ python script.py --help
usage: script.py [-h] [-x CONF]
optional arguments:
-h, --help show this help message and exit
-x CONF, --extended CONF
a comma-separated list of options.
s=[YYYY]MMDD,n=NAME,c=COLOR
s,start=[YYYY]MMDD
start day of period ...
HTH,
STeVe
More information about the Python-list
mailing list