Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #33871
| References | <roy-DDAE52.13462523112012@news.panix.com> |
|---|---|
| From | Ian Kelly <ian.g.kelly@gmail.com> |
| Date | 2012-11-23 18:07 -0700 |
| Subject | Re: argparse -- mutually exclusive sets of arguments? |
| Newsgroups | comp.lang.python |
| Message-ID | <mailman.248.1353719298.29569.python-list@python.org> (permalink) |
On Fri, Nov 23, 2012 at 11:46 AM, Roy Smith <roy@panix.com> wrote:
> My command either takes two positional arguments (in which case, both
> are required):
>
> $ command foo bar
>
> or the name of a config file (in which case, the positional arguments
> are forbidden):
>
> $ command --config file
>
> How can I represent this with argparse; add_mutually_exclusive_group()
> isn't quite the right thing. It could specify that foo and --config are
> mutually exclusive, but not (as far as I can see) the more complicated
> logic described above.
I don't think you could even do the former. An argument must be
optional in order to be mutually exclusive with anything. This works,
however:
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('--config', type=file)
group.add_argument('--foobar', nargs=2, metavar=('FOO', 'BAR'))
print parser.parse_args()
Downsides are that the resulting interface is a little more formal and
a little less friendly, and unless you customize the action you'll
wind up with a 2-element 'foobar' arg instead of separate 'foo' and
'bar' args.
Back to comp.lang.python | Previous | Next — Previous in thread | Find similar | Unroll thread
argparse -- mutually exclusive sets of arguments? Roy Smith <roy@panix.com> - 2012-11-23 13:46 -0500 Re: argparse -- mutually exclusive sets of arguments? Terry Reedy <tjreedy@udel.edu> - 2012-11-23 13:56 -0500 Re: argparse -- mutually exclusive sets of arguments? Ian Kelly <ian.g.kelly@gmail.com> - 2012-11-23 18:07 -0700
csiph-web