Argparse:解析多个子命令

时间:2016-09-22 16:25:37

标签: python argparse subcommand subparsers

做了一些研究,但找不到任何可行的解决方案。我试图解析以下命令行,其中' test'并且'训练'是两个独立的子命令,每个子命令都有不同的参数:

./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

我一直在尝试使用两个subparser(' test',' train')但似乎当时只能解析一个。将主分析器的那些子分析符父母放在一起也是很好的,例如,命令' -a'没有必要添加到子分析师培训'和'测试'

任何解决方案?

1 个答案:

答案 0 :(得分:0)

之前有人问过,虽然我不确定找到这些问题的最佳方式。

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

  • 323: History, Physics 999: Chemistry, History, Physics 1234: Chemistry 2834: Physics 3455: Chemistry, History, Mathematics 56767: Mathematics 创建一个位置参数;与add_subparsers不同,“位置只行动一次。

  • 'add_subparsers'如果多次调用它会引发错误

  • 解析仅围绕一个此类调用构建

我们过去提出的一项工作是'嵌套'或'递归'子订阅者。换句话说,optionals已设置,因此它也需要一个subparser。但是,是否需要子分析符是复杂的。

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

从侧边栏

Multiple invocation of the same subcommand in a single command line

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