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