我想找到解析相关参数序列的方法,最好使用。解析不相互排斥的命令行参数组
例如:
command --global-arg --subgroup1 --arg1 --arg2 --subgroup2 --arg1 --arg3 --subgroup3 --arg4 --subcommand1 --arg1 --arg3
其中--global-arg
适用于整个命令,但每个--subgroupN
参数具有仅适用于它的子参数(并且可以具有相同的名称,如--arg1
和--arg3
以上) ,并且其中一些子参数是可选的,所以子参数的数量不是常量。但是,我知道每个--subgroupN
子参数集都是通过存在另一个--subgroupN
或参数列表的末尾来完成的(如果全局参数不能在最后出现,我不会发生混淆,尽管我认为只要他们不会与子参数名称冲突)。
的--subgroupN
元素本质上是子命令,但我似乎不能够因为它吸食任何以下--subgroupN
条目以及(因此意外的参数barfs)使用的子解析器的能力。
是否有超越写我自己的解析器任何建议(这种风格的参数列表中所使用的xmlstarlet的例子)?我想我至少可以利用的东西出来argparse的,如果这是唯一的选择......
例子下面是找到一种方法来解析大意如下的参数结构的尝试
的例子:
(a --name <name>|b --name <name>)+
在第一个例子中,我希望有--a和--b引入一组由subparser处理的参数。
我希望能沿着
Namespace(a=Namespace(name="dummya"), b=Namespace(name="dummyb"))
子分析器例子的线得到的东西也许失败
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
parser_a = subparsers.add_parser("a")
parser_b = subparsers.add_parser("b")
parser_a.add_argument("--name")
parser_b.add_argument("--name")
parser.parse_args(["a", "--name", "dummy"])
> Namespace(name='dummy') (Good)
parser.parse_args(["b", "--name", "dummyb", "a", "--name", "dummya"])
> error: unrecognized arguments: a (BAD)
互斥组失败
parser = argparse.ArgumentParser()
g = parser.add_mutually_exclusive_group()
g1 = g.add_mutually_exclusive_group()
g1.add_argument("--name")
g2 = g.add_mutually_exclusive_group()
g2.add_argument("--name")
> ArgumentError: argument --name: conflicting option string(s): --name (BAD)
(我是不是真的期待这个工作,这是一个尝试,看看我是否可以重复分组论证。)
请修改您的问题以显示您尝试的代码。你会得到更好的答案。 – msw
至少有一个关于处理多个子命令的SO问题。解决方案涉及诸如递归子命令之类的东西。没有任何直接使用'argparse'。 – hpaulj
搜索'[argparse] multiple'出现这样的帖子,http://stackoverflow.com/q/25318622/901925 – hpaulj