I have a following code in python:
parser = argparse.ArgumentParser(description='Deployment tool')
group = parser.add_mutually_exclusive_group()
group.add_argument('-a', '--add', dest='name_to_add', help='Add a new group or a role to existing group')
group.add_argument('-u', '--upgrade', dest='name_to_upgrade', help='Upgrade a group with the new version')
parser.add_argument('--web_port', help='Port of the WEB instance that is being added to the group')
My problem is with “–web_port” option. I want to be able to add this option only with “-a” option but not with “-u”.
I want to be able to run: “python my_script.py -a name –web_port=XXXX”.
I don’t want to be able to run: “python my_script.py -u name –web_port=XXXX”
How should I change my code in order to be able to run it this way?
Thanks, Arshavski Alexander.
Instead of having
-aand-ube options, you may want to make them subcommands. Then, make--web-portan option of theaddsubcommand:Something like:
If you try run
you’ll get an error for unrecognized argument “–web_port”.
Likewise, if you try
you’ll get an error for unrecognized argument “upgrade”, since
you only defined a single positional argument for the ‘add’ subcommand.
In other words, subcommands are implicitly mutually exclusive. The only
tiny wart is that you need to add the “name” positional parameter to each
subparser.