python中互斥的选项组单击
如何在单击中创建互斥选项组?我想要么接受标志“-all”,要么选择参数为“-color red”的选项;这就是我想到的。对于每个选项,您可以给出冲突选项的列表python中互斥的选项组单击,python,python-click,Python,Python Click,如何在单击中创建互斥选项组?我想要么接受标志“-all”,要么选择参数为“-color red”的选项;这就是我想到的。对于每个选项,您可以给出冲突选项的列表 从单击导入命令、选项、选项、使用错误 类MutuallyExclusiveOption(选项): 定义初始化(self,*args,**kwargs): self.mutual_exclusive=set(kwargs.pop('mutual_exclusive',[])) help=kwargs.get('help','') 如果自相矛
从单击导入命令、选项、选项、使用错误
类MutuallyExclusiveOption(选项):
定义初始化(self,*args,**kwargs):
self.mutual_exclusive=set(kwargs.pop('mutual_exclusive',[]))
help=kwargs.get('help','')
如果自相矛盾:
ex_str=','.join(自相斥)
kwargs['help']=help+(
'注意:此参数与'
'参数:['+ex_str+']
)
super(MutuallyExclusiveOption,self)。\uuuuu init\uuuuu(*args,**kwargs)
def handle_parse_结果(self、ctx、opts、args):
如果选项中的self.mutual_.exclusive.intersection(opts)和self.name:
提高使用率错误(
“非法使用:`{}`与互斥”
“参数`{}`..”格式(
姓名,
“,”连接(自排斥)
)
)
返回super(MutuallyExclusiveOption,self)。处理解析结果(
ctx,
选择,
args
)
然后使用常规选项
decorator,但传递cls
参数:
@command(help=“运行命令”)
@选项('--jar file',cls=MutuallyExclusiveOption,
help=“拓扑所在的jar文件。”,
互斥=[“其他参数”])
@选项('--其他参数',
cls=MutuallyExclusiveOption,
help=“拓扑所在的jar文件。”,
互斥=[“jar\u文件”])
def cli(jar_文件,其他_参数):
打印“正在运行cli”
打印“jar文件:{}”。格式(jar_文件)
打印“其他参数:{}”。格式(其他参数)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
cli()
它包括上面的代码,并显示运行它的输出
如果这对您不起作用,那么在click github页面上也有一些(已关闭的)问题提到了这一点,您可以使用一些想法
$ app.py --help
Usage: app.py [OPTIONS]
Options:
Grouped options: [mutually_exclusive, required]
Group description
--all
--color TEXT
--help Show this message and exit.
您可以使用添加选项组和约束以单击的包。在Cloup中,有两个选项可以解决此问题
免责声明:我是该软件包的作者
选项1:@选项组
使用@option\u group
定义选项组时,每个组中的选项都显示在单独的帮助部分(如argparse中)。您可以将约束(如互斥)应用于选项组,如下所示:
来自cloup导入命令、选项、选项组
从cloup.constraints导入互斥
@命令()
@选项组(
“颜色选项”,
选项('--all',all_colors',is_flag=True),
选项('--color'),
约束=互斥
)
def cmd(**kwargs):
印刷品(kwargs)
帮助将是:
用法:cmd[选项]
颜色选项[相互排斥]:
--全部
--彩色文本
其他选择:
--帮助显示此消息并退出。
选项2:@约束
如果不希望选项组显示在命令帮助中,可以使用@constraint
并通过其(目标)名称指定受约束的选项:
来自cloup导入命令,选项
从cloup.constraints导入约束,互斥
@命令()
@选项('--all',all_colors',is_flag=True)
@选项('--color')
@约束(互斥,[“所有颜色”,“颜色])
def cmd(**kwargs):
印刷品(kwargs)
以这种方式定义的约束可以记录在命令帮助中!默认情况下禁用此功能,但通过将show_constraints=True
传递到@命令
可以轻松启用此功能。结果是:
用法:cmd[选项]
选项:
--全部
--彩色文本
--帮助显示此消息并退出。
限制条件:
{--all,--color}相互排斥
错误消息
在这两种情况下,如果运行cmd--all--color red
,您将得到:
用法:cmd[选项]
请尝试“cmd--help”以获取帮助。
错误:以下参数相互排斥:
--全部
--颜色
其他限制
Cloup定义的约束应涵盖99.9%的需求。它甚至支持条件约束
例如,如果用户必须提供一个互斥选项,请在上面的示例中将互斥
替换为require(1)
您可以找到所有可用的约束。看起来不像。你就不能创建一个“all”选项,然后从该选项中调用所有其他函数吗?@Charlie:是的,但是用户可以在命令行上放置“-all--color red”,这似乎不对。好的,告诉我更多。如果他们那样做会发生什么?也许你可以写一些示例代码。这看起来很有希望,而且比前面的示例更简洁。我将尝试一下(并可能将其提升为“最有帮助”)。谢谢。@Bryce谢谢。我是这个软件包的维护者,所以如果您愿意,请毫不犹豫地告诉我任何问题以及您使用它的经验。:)
$ app.py --help
Usage: app.py [OPTIONS]
Options:
Grouped options: [mutually_exclusive, required]
Group description
--all
--color TEXT
--help Show this message and exit.