繁体   English   中英

使用plac定义子命令的常用选项

[英]Defining common options for sub-commands with plac

我的问题基本上是对这个问题的后续行动。 这显示了如何使用plac自动生成一个命令行界面,其中子命令代表每个函数。

是否有可能告诉plac所有子命令共有的选项,并且可以被视为“全局”选项? 实际上,这些选项在没有子命令的情况下应该具有意义。

举个例子,我可能有svn checkoutsvn update子命令,但也喜欢svn -vsvn --version命令。

几年前,我使用plac设置了一个多处理脚本。 它有多个命令,包含重叠的参数集。 我会尝试抽象我做的事情

class Interface(object):
    commands = ['fn1','fn2',...]
    dict1 = dict(quiet=(...), dryrun=(...), ...)
    dict2 = dict()
    dict3 = dict()

    dict1.update(dict2)
    @plac.annotations(**dict1)
    def fn1(self, dryrun, quiet, ...)
        ...
    @plac.annotations(foo=(...), **dict2)
    def fn2(self, foo, ...)
        ...
    @plac.annotations(**dict2)
    def fn3(self, ...)
        ...

因此,虽然每个函数的参数必须完整拼写,但注释可以通过混合和匹配各种字典来构建。

我在plac生锈了,所以我将首先从基本的argparse用法中解决这个问题。

p = argparse.ArgumentParser(version='1.2.3')
sp = p.add_subparser()
sp.add_parser('checkout')
sp.add_parser('update')

p.parse_args(['-v'])返回1.2.3并退出。 但是-v就像-h ,一个特殊的论点。

p.parse_args([])虽然给出了too few arguments错误。 即它需要一个子命令。 如果“全局选项”类似于-d

几个资格:

  • 新版本以不同的方式指定“版本”参数。

  • 3.3 ,不再需要子命令。 这是由于必需参数错误消息的更改,并且可能/或可能不适用于将来的更改。

我认为如果解析器是由plac生成的,这些限制仍然适用,但我必须检查plac代码以确定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM