Python argparse – 将参数添加到多个子分析器

我的脚本定义了一个主分析器和多个子分析器。 我想将-p参数应用于一些子分析器。 到目前为止,代码如下所示:

 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") 

正如你所看到的add_arument ("-p")重复了两次。 实际上我有更多的parsing器。 有没有办法循环现有的子分析器,以避免重复?

为了logging,我正在使用Python 2.7

这可以通过定义包含常用选项的父parsing器来实现:

 [...] parent_parser = argparse.ArgumentParser(add_help=False) parent_parser.add_argument("-p", type=int, required=True, help="set db parameter") parser_create = subparsers.add_parser("create", parents=[parent_parser], help="create the orbix environment") parser_update = subparsers.add_parser("update", parents=[parent_parser], help="update the orbix environment") 

您也可以遍历子分析器,并将相同的选项添加到所有的分析器中。

 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_update = subparsers.add_parser ("update", help = "update the orbix environment") for subparser in [parser_create, parser_update]: subparser.add_argument ("-p", type = int, required = True, help = "set db parameter") 

您可以用以下方式遍历您的子分析器。

 for name, subp in subparsers.choices.items(): print(subp) subp.add_argument(dest='g', help='Inpput for g variable', default='7')