Python argparse 子解析器的有效用法?

Python argparse subparser valid usage?

我打算使用 argparse 库编写一个命令,这是我的命令结构:

$ python cvs.py -d my_adress local diff -r xyz -N -d details

在这里,本地有多个命令分组到它,例如本地提交,本地添加等。 例如。 [-d my_address] 在 main 中解析,本地 diff 之后的所有开关由为本地 diff 执行的函数一起解析。

同样,还有一个与local并行的命令组;说全球。

开关 -d 未与 -r 混用。因此,解析 -r 的解析器不知道 -d ,反之亦然。

是否可以使用 argparse 来实现?如果是的话,有人可以建议我一个粗略的算法来做到这一点。 如果不是,在 python 中还有什么其他可能的方法可以做到这一点? 谢谢

nargs参数,即'*'选项。 它不会进行子解析(我认为 argparse 根本无法做到这一点),但它至少会将您的选项分组,以便您将 -d-r 作为单独的选项返回。 -N 不会是已知选项。我不知道 argparse 是否会认为这是一个错误(你不想要),或者只是 -r.

的另一个参数

您的方法可能会失败。 CVS 子命令可以有各种单字母选项,如 -d-r 等(它是 a long list)。您会发现自己不断做出艰难的选择,是要支持特定的 CVS 选项作为子命令,还是使用字母作为 cvs.py 选项。

您可以引入一些标记来分隔 CVS 子命令,即 python cvs.py -d my_adress local diff § -r xyz -N。但是,这不再是 cvs -d my_adress local diff; cvs -r xyz -N 的真正改进。