如何在Click中创建互斥选项组?我想要接受标志"--all"或者使用像"--color red"这样的参数选项.
在单击中,我正在定义此命令:
@click.command('time', short_help='Timesheet Generator')
@click.argument('time_command', type=click.Choice(['this', 'last']))
@click.argument('data_mode', type=click.Choice(['excel', 'exchange']), default='exchange')
@click.option('--password', prompt=True, hide_input=True, confirmation_prompt=False)
@pass_context
def cli(ctx, time_command, data_mode, password):
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我只希望密码在data_mode参数等于exchange. 我怎么能把它拉下来?
我正在寻找一种Python方式来验证参数,当它们的验证在逻辑上取决于从其他参数解析的值时。
这是一个简单的例子:
parser.add_argument(
'--animal',
choices=['raccoon', 'giraffe', 'snake'],
default='raccoon',
)
parser.add_argument(
'--with-shoes',
action='store_true',
)
Run Code Online (Sandbox Code Playgroud)
在这种情况下,解析此命令将导致错误:
my_script.py --animal snake --with-shoes
Run Code Online (Sandbox Code Playgroud)
在这里添加互斥组似乎没有帮助,因为其他组合都可以:
my_script.py --animal raccoon --with-shoes
my_script.py --animal raccoon
my_script.py --animal snake
my_script.py --animal giraffe --with-shoes
my_script.py --animal giraffe
Run Code Online (Sandbox Code Playgroud)
理想情况下,验证错误不应与--animal参数或--with-shoes参数绑定,因为接口无法告诉您此处需要更改哪个值。每个值都是有效的,但不能组合使用。
我们可以通过对args命名空间进行后处理来做到这一点,但是我正在寻找一种解决方案,该解决方案会导致parser.parse_args()调用失败,即实际上是在参数解析期间(而不是之后)失败。