【问题标题】:Argparse: parse multiple subcommandsargparse:解析多个子命令
【发布时间】:2017-01-31 08:07:42
【问题描述】:

做了一些研究,但找不到任何可行的解决方案。我正在尝试解析以下命令行,其中“test”和“train”是两个独立的子命令,每个子命令都有不同的参数:

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

我一直在尝试使用两个子解析器('test'、'train'),但似乎当时只能解析一个。同样,让主解析器的那些子解析器父级也很棒,例如命令'-a'不必同时添加到子解析器'train'和'test'

有什么办法吗?

【问题讨论】:

  • 您可以使用parents 为多个子解析器添加一个公共参数。或者你可以为主解析器定义-a

标签: python argparse subcommand subparsers


【解决方案1】:

以前有人问过这个问题,但我不确定找到这些问题的最佳方法。

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

  • add_subparsers 创建一个位置参数;与optionals 不同,`positional 只执行一次。

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

【讨论】:

    猜你喜欢
    • 2019-09-23
    • 2012-05-13
    • 2020-09-06
    • 2015-07-17
    • 1970-01-01
    • 2013-09-13
    • 2014-10-08
    相关资源
    最近更新 更多