Python 如何在argparser的两个子命令中共享arg?

Python 如何在argparser的两个子命令中共享arg?,python,python-3.x,command-line-arguments,argparse,Python,Python 3.x,Command Line Arguments,Argparse,例如,有两个子命令run和batch run,run解析器如下所示: parser_run = sub_parsers.add_parser("run") parser_run.add_argument("-c", "--config", dest="config", required=True, help="specify the config file to use", ) parser_run.add_argument("--from", dest="start_step", d

例如,有两个子命令
run
batch run
run
解析器如下所示:

parser_run = sub_parsers.add_parser("run")
parser_run.add_argument("-c", "--config", dest="config", required=True,
    help="specify the config file to use", )

parser_run.add_argument("--from", dest="start_step", default=0, type=int,
    help="Only step after this number will be processed")
parser_run.add_argument("--to", dest="end_step", default=100, type=int,
    help="Only step before this number will be processed ")
parser_run.add_argument("--skip", dest="skip_step", default="",
    help="Steps to skip, use comma as seperator")

parser_run.add_argument("-v", "--verbose-level", dest="verbose_level", type=int, default=2)
parser_run.add_argument("--dry-run", dest="dry_run", action="store_true", default=False)
parser_run.add_argument("--allow-dangling", dest="allow_dangling", action="store_true", default=False)
parser_run.add_argument("--resume", dest="resume", action="store_true", default=False)
parser_run.add_argument("--remove", dest="clean", action="store_true", default=False)

现在我需要编写
batch
解析器,它包含
run
的所有参数,但是
-c
(它使用
-b
来指定批配置文件)。我只是想知道是否需要将
add_argument
的所有代码复制并粘贴到
batch
解析器中。或者有更好的方法吗?

解析器运行的对象就是一个对象,因此您可以将其分配给另一个变量,使用循环,等等:

parser_run = sub_parsers.add_parser("run")
parser_run.add_argument("-c", "--config", dest="config", required=True,
    help="specify the config file to use", )

parser_batch = sub_parsers.add_parser("batch")
parser_batch.add_argument("-b", "--batch-config", dest="config", required=True,
    help="specify the batch config file to use", )

for sub_parser in (parser_run, parser_batch):
    sub_parser.add_argument("--from", dest="start_step", default=0, type=int,
        help="Only step after this number will be processed")
    sub_parser.add_argument("--to", dest="end_step", default=100, type=int,
        help="Only step before this number will be processed ")
    sub_parser.add_argument("--skip", dest="skip_step", default="",
        help="Steps to skip, use comma as seperator")

    sub_parser.add_argument("-v", "--verbose-level", dest="verbose_level", type=int, default=2)
    sub_parser.add_argument("--dry-run", dest="dry_run", action="store_true", default=False)
    sub_parser.add_argument("--allow-dangling", dest="allow_dangling", action="store_true", default=False)
    sub_parser.add_argument("--resume", dest="resume", action="store_true", default=False)
    sub_parser.add_argument("--remove", dest="clean", action="store_true", default=False)
现在,两个子解析器都添加了相同的参数