如何在Python中为[-A[-b value]]执行argparse子parse

如何在Python中为[-A[-b value]]执行argparse子parse,python,argparse,subparsers,Python,Argparse,Subparsers,我想重新创建[-A[-b值]],其中in命令如下所示: test.py-A-b 123 看起来很简单,但我做不好。我最近的尝试是: byte = subparser.add_parser("-A") byte.add_argument("-b", type=int) 当add\u parser命令接受“-A”时,解析器不能使用它。请看帮助: usage: ipython3 [-h] {-A} ... positional arguments: {-A} optional argumen

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

test.py-A-b 123

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

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

add\u parser
命令接受“-A”时,解析器不能使用它。请看帮助:

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

positional arguments:
  {-A}

optional arguments:
  -h, --help  show this help message and exit
子parser实际上是一种特殊的
位置
参数。对于主解析器,您已经有效地定义了

add_argument('cmd', choices=['-A'])
但是对于解析代码来说,'-A'看起来像一个
optional的
标志,就好像您已经定义了

add_argument('-A')
错误:

error: argument cmd: invalid choice: '123' (choose from '-A')
表示它跳过了
-A
-b
(未为主解析器定义),并尝试将“123”解析为第一个位置。但它不在有效选择列表中


因此,要使用子parser,您需要指定“A”作为子parser,而不是“-A”。

add\u parser
如果尝试使用选项名作为参数,则可能会返回错误。确实如此,上面的代码返回,错误:无效选择:“123”(从“-A”中选择)不,我是指调用
add\u parser
本身,调用
parse_args()
时不会这样做,因为这样的子命令充其量是有缺陷的。明白了,在发布错误、无法识别的参数-B-s之前,我也尝试过这种方法。正如您和cheapner(上面的评论)所提到的,我在“”中做了-A,-t等的非正统声明,但在所有视频/教程中,我还没有看到输入的正式声明>>test.py-A 123-t phs,就像您所说的,add_参数允许“-A”和subparser,但是,这并不能阻止它