["python","argparse"]
Python argparse - Add argument to multiple subparsers

My script defines one main parser and multiple subparsers. I want to apply the -p argument to some subparsers. So far the code looks like this: parser = argparse.ArgumentParser(prog="myProg") subparsers = parser.add_subparsers(title="actions") parser.add_argument("-v", "--verbose", action="store_true", dest="VERBOSE", help="run in verbose mode") parser_create = subparsers.add_parser ("create", help = "create the orbix environment") parser_create.add_argument ("-p", type = int, required = True, help = "set db parameter") # Update parser_update = subparsers.add_parser ("update", help = "update the orbix environment") parser_update.add_argument ("-p", type = int, required = True, help = "set db parameter") As you can see the add_arument ("-p") is repeated twice. I actually have a lot more subparsers. Is there a way to loop through the existing subparsers in order to avoid repetition? For the record, I am using Python 2.7
Update by @hpaulj Due to changes in handling subparsers since 2011, it is a bad idea to use the main parser as a parent. More generally, don't try to define the same argument (same dest) in both main and sub parsers. The subparser values will overwrite anything set by the main (even the subparser default does this). Create separate parser(s) to use as parents. And as shown in the documentation, parents should use add_help=False. Original answer This can be achieved by defining a parent parser containing the common option(s): import argparse parent_parser = argparse.ArgumentParser(description="The parent parser") parent_parser.add_argument("-p", type=int, required=True, help="set db parameter") subparsers = parent_parser.add_subparsers(title="actions") parser_create = subparsers.add_parser("create", parents=[parent_parser], add_help=False, description="The create parser", help="create the orbix environment") parser_create.add_argument("--name", help="name of the environment") parser_update = subparsers.add_parser("update", parents=[parent_parser], add_help=False, description="The update parser", help="update the orbix environment") This produces help messages of the format: parent_parser.print_help() Output: usage: main.py [-h] -p P {create,update} ... The parent parser optional arguments: -h, --help show this help message and exit -p P set db parameter actions: {create,update} create create the orbix environment update update the orbix environment parser_create.print_help() Output: usage: main.py create [-h] -p P [--name NAME] {create,update} ... The create parser optional arguments: -h, --help show this help message and exit -p P set db parameter --name NAME name of the environment actions: {create,update} create create the orbix environment update update the orbix environment However, if you run your program, you will not encounter an error if you do not specify an action (i.e. create or update). If you desire this behavior, modify your code as follows. <...> subparsers = parent_parser.add_subparsers(title="actions") subparsers.required = True subparsers.dest = 'command' <...> This fix was brought up in this SO question which refers to an issue tracking a pull request.