python中的互斥选项组请点击

python中的互斥选项组请点击,第1张

python中的互斥选项组请点击

我最近也遇到过同样的用例。这就是我想出的。对于每个选项,您都可以给出冲突选项的列表。

from click import command, option, Option, UsageErrorclass MutuallyExclusiveOption(Option):    def __init__(self, *args, **kwargs):        self.mutually_exclusive = set(kwargs.pop('mutually_exclusive', []))        help = kwargs.get('help', '')        if self.mutually_exclusive: ex_str = ', '.join(self.mutually_exclusive) kwargs['help'] = help + (     ' NOTE: This argument is mutually exclusive with '     ' arguments: [' + ex_str + '].' )        super(MutuallyExclusiveOption, self).__init__(*args, **kwargs)    def handle_parse_result(self, ctx, opts, args):        if self.mutually_exclusive.intersection(opts) and self.name in opts: raise UsageError(     "Illegal usage: `{}` is mutually exclusive with "     "arguments `{}`.".format(         self.name,         ', '.join(self.mutually_exclusive)     ) )        return super(MutuallyExclusiveOption, self).handle_parse_result( ctx, opts, args        )

然后使用常规

option
装饰器,但传递
cls
参数:

@command(help="Run the command.")@option('--jar-file', cls=MutuallyExclusiveOption,        help="The jar file the topology lives in.",        mutually_exclusive=["other_arg"])@option('--other-arg',        cls=MutuallyExclusiveOption,        help="The jar file the topology lives in.",        mutually_exclusive=["jar_file"])def cli(jar_file, other_arg):    print "Running cli."    print "jar-file: {}".format(jar_file)    print "other-arg: {}".format(other_arg)if __name__ == '__main__':    cli()

这里的要点
包括上面的代码,并显示了运行它的输出。

如果这对您不起作用,那么在单击github页面上还会有一些(封闭的)问题提及此问题,并提供了一些您可以使用的想法。

  • https://github.com/pallets/click/issues/257
  • https://github.com/pallets/click/issues/509


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/4964307.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-13
下一篇2022-11-13

发表评论

登录后才能评论

评论列表(0条)

    保存