如何在 Python 中对 [-A[-b 值]] 执行 argparse 子解析

How to perform an argparse subparse for [-A[-b value]] in Python

我想重新创建 [-A [-b 值]],命令如下所示:

test.py -A -b 123

看起来很简单,但我做不对。我最近的尝试是:

byte = subparser.add_parser("-A")
byte.add_argument("-b", type=int)

虽然 add_parser 命令接受“-A”,但解析器无法使用它。看帮助:

usage: ipython3 [-h] {-A} ...

positional arguments:
  {-A}

optional arguments:
  -h, --help  show this help message and exit

子解析器实际上是一种特殊的 positional 参数。对于主解析器,您已经有效地定义了

add_argument('cmd', choices=['-A'])

但是对于解析代码,'-A' 看起来像一个 optional's 标志,就好像你已经定义了

add_argument('-A')

错误:

error: argument cmd: invalid choice: '123' (choose from '-A')

意味着它跳过了 -A-b (它们没有为主解析器定义),并试图将 '123' 解析为第一个位置。但它不在有效选择列表中。

所以要使用子解析器,您需要指定 'A' 作为子解析器,而不是 '-A'。