An example how subcommands can be used with argparse module:
import argparse
import sys
parser = argparse.ArgumentParser()
# Global options
parser.add_argument(
"-c", "--config-file",
help="specify the configuration file to read (default: argtest.cfg)",
default="argtest.cfg",
)
subparsers = parser.add_subparsers(dest="command")
# Command: update-device
parser_update_device = subparsers.add_parser(
"update-device",
help="update device data",
)
parser_update_device.add_argument(
"-I", "--ip",
help="device IP address",
required=True,
)
parser_update_device.add_argument(
"-S", "--site-name",
help="new site name",
)
# Command: add-vlan
parser_add_vlan = subparsers.add_parser(
"add-vlan",
help="add a VLAN",
)
parser_add_vlan.add_argument(
"--vlan-id",
help="new VLAN ID",
required=True,
)
args = parser.parse_args()
if not args.command:
parser.parse_args(["--help"])
sys.exit(0)
# Do the stuff here
print(args)
Sample output:
markku@btest:~/temp$ python3 argtest.py
usage: argtest.py [-h] [-c CONFIG_FILE] {update-device,add-vlan} ...
positional arguments:
{update-device,add-vlan}
update-device update device data
add-vlan add a VLAN
optional arguments:
-h, --help show this help message and exit
-c CONFIG_FILE, --config-file CONFIG_FILE
specify the configuration file to read (default:
argtest.cfg)
markku@btest:~/temp$ python3 argtest.py invalid-command
usage: argtest.py [-h] [-c CONFIG_FILE] {update-device,add-vlan} ...
argtest.py: error: argument command: invalid choice: 'invalid-command' (choose from 'update-device', 'add-vlan')
markku@btest:~/temp$ python3 argtest.py update-device
usage: argtest.py update-device [-h] -I IP [-S SITE_NAME]
argtest.py update-device: error: the following arguments are required: -I/--ip
markku@btest:~/temp$ python3 argtest.py update-device -h
usage: argtest.py update-device [-h] -I IP [-S SITE_NAME]
optional arguments:
-h, --help show this help message and exit
-I IP, --ip IP device IP address
-S SITE_NAME, --site-name SITE_NAME
new site name
markku@btest:~/temp$ python3 argtest.py update-device -I x.x.x.x
Namespace(command='update-device', config_file='argtest.cfg', ip='x.x.x.x', site_name=None)
markku@btest:~/temp$