Currently my code looks like this. It allows me to parse multiple parameters my program script gets. Is there a different way that is closer to \'best practices\'? I haven\'t se
See http://docs.python.org/library/argparse.html#sub-commands:
One particularly effective way of handling sub-commands is to combine the use of the
add_subparsers()
method with calls toset_defaults()
so that each subparser knows which Python function it should execute.
In a nutshell:
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
weather_parser = subparsers.add_parser('get-weather')
weather_parser.add_argument('--bar')
weather_parser.set_defaults(function=get_weather) # !
args = parser.parse_args(['get-weather', '--bar', 'quux'])
print args.function(args)
Here we create a subparser for the command get-weather
and assign the function get_weather
to it.
Note that the documentation says that the keyword/attribute is named func
but it's definitely function
as of argparse 1.1.
The resulting code is a bit too wordy so I've published a small package "argh" that makes things simpler, e.g.:
parser = argparse.ArgumentParser()
add_commands(parser, [get_weather])
print dispatch(parser, ['get-weather', '--bar', 'quux'])
"Argh" can do more but I'll let stack overflow answer that. :-)