2016-09-22 27 views
1

做了一些研究,但找不到任何工作解决方案。我试图解析以下命令行,其中“测试”和“训练”是两个独立的子各有不同的论点:Argparse:解析多个子命令

./foo.py train -a 1 -b 2 
./foo.py test -a 3 -c 4 
./foo.py train -a 1 -b 2 test -a 3 -c 4 

我一直在用两个subparsers(“测试”努力,“火车'),但似乎只有一个人可以在当时解析。另外,将主分析器的父分析器设置为例如命令'-a'不必同时添加到子分析器的'列车'和'测试'

任何解决方案?

+0

你可以用'parents'一个普遍的说法添加几个subparsers。或者你可以为主分析器定义'-a'。 – hpaulj

回答

0

这已被问过,但我不确定找到这些问题的最佳方式。

整个subparser机制是为一个这样的命令而设计的。有几点需要注意:

  • add_subparsers创建一个位置参数;不像optionals`位置只作用一次。

  • “add_subparsers”如果你调用它几次

  • 解析是建立在只有一个这样的待命,我们已经提出了在过去是

一个工作会引发错误'嵌套'或'递归'子对象。换句话说,train已设置,因此它也需要一个子分析器。但是,是否需要分析器是复杂的。

或者您可以检测并调用多个解析器,绕过subparser机制。

从侧边栏

Multiple invocation of the same subcommand in a single command line

Parse multiple subcommands in python simultaneously or other way to group parsed arguments