Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

argparse -- mutually exclusive sets of arguments?

3,914 views
Skip to first unread message

Roy Smith

unread,
Nov 23, 2012, 1:46:25 PM11/23/12
to
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.

Terry Reedy

unread,
Nov 23, 2012, 1:56:50 PM11/23/12
to pytho...@python.org
Make the two positional arguments be one duple?
Or tell argparse that all three are optional and handle the 'more
complicated logic' in your own code after argparse returns.


--
Terry Jan Reedy

Ian Kelly

unread,
Nov 23, 2012, 8:07:46 PM11/23/12
to Python
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.
0 new messages