【问题标题】:Python argparse subparser valid usage?Python argparse subparser 的有效用法?
【发布时间】:2015-07-30 20:02:09
【问题描述】:

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

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

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

同样,还有一个命令组与本地并行;说全局。

开关 -d 不与 -r 混合。所以,解析器解析 -r 不知道 -d ,反之亦然。

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

【问题讨论】:

  • 您的描述不清楚。 'local has multiple command[s] inside'是什么意思?像-d 这样的标记参数是独立解析的,并且可以以任何顺序出现。请记住,argparse 会解析您的输入,但不会执行它。

标签: python argparse subparsers


【解决方案1】:

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 的真正改进了。

【讨论】:

    猜你喜欢
    • 2018-06-24
    • 2017-11-01
    • 2019-12-25
    • 2013-03-09
    • 2019-02-11
    • 2017-05-07
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    相关资源
    最近更新 更多