Python 使用argparse是否可以使用带破折号的子parser?

Python 使用argparse是否可以使用带破折号的子parser?,python,argparse,mutual-exclusion,Python,Argparse,Mutual Exclusion,我想指定如下“参数组”: fetch-something --basic-auth --user=me --password=myP4ss 或 (类似于) 我原以为我可以创建子parser--basic auth和--oauth,但看起来子parser是这样添加的 auths = parser.add_subparsers(help='authentication-method', metavar="METHOD") oauth_parser = auths.add_par

我想指定如下“参数组”:

fetch-something --basic-auth --user=me --password=myP4ss

(类似于)

我原以为我可以创建子parser
--basic auth
--oauth
,但看起来子parser是这样添加的

auths = parser.add_subparsers(help='authentication-method', metavar="METHOD")
oauth_parser = auths.add_parser('--oauth')
无法识别
--oauth
(带破折号)

有没有什么方法可以让它看起来像是一个带破折号的潜艇?或者通过手动检查参数的存在和不存在来描述所描述的行为而不必指定所有需求的任何其他方式

例如

应无效,因为
密码
不得与
--oauth

编辑

也许这对你来说仍然是一个第一世界的问题,但另一个你想要这样做的原因是订购:

看起来很奇怪,因为
--secret
不再在
oauth
的范围内,但仍然有效

方法

一种可能的方法是
parse_known_args
all(在本例中)非身份验证参数,并将其余参数提供给额外的“身份验证解析器”
对于
basic auth
oauth
,如果没有提供正确的参数,可能会引发。创建一个完整的帮助文本将很困难。

使用破折号标记
标记的/optionals
深入到
argparse
代码中。对于主解析器,子解析器实际上是
位置
参数的
选择
。另一个中心解析目标是以任意顺序接受标记的参数。一般来说,它遵循程序员已经使用多年的POSIX实践。您是否想过使用帮助应该是什么样子的?或者错误消息应该是什么?使用破折号来标记
标记的/optionals
深入到
argparse
代码中。对于主解析器,子解析器实际上是
位置
参数的
选择
。另一个中心解析目标是以任意顺序接受标记的参数。一般来说,它遵循程序员已经使用多年的POSIX实践。您是否想过使用帮助应该是什么样子的?或者错误消息应该是什么?
auths = parser.add_subparsers(help='authentication-method', metavar="METHOD")
oauth_parser = auths.add_parser('--oauth')
fetch-something --oauth --user=me --password=abc --client=9038534.client --secret=aslu432409x
fetch-something --secret=aslu432409x --oauth --user=me --client=9038534.client