将零个或可变数量的值传递给 Click.Option

Passing zero or variable number of values to Click.Option

假设我们有以下函数,它 有一个可选参数 exclude,这是预期的 成为字符串列表:

@group.command()
@click.option(???)
def load(exclude = None):
    # ...

我希望用户能够像这样执行脚本:

python script.py load --exclude one two three

python script.py load --exclude something

在这种情况下,我希望 exclude 分别为 ['one', 'two', 'three']['something']。 但是我希望 --exclude 中的值的数量是可变的,包括 0。即用户应该能够执行

python script.py load

在这种情况下 exclude 应该是 None(或 [],无所谓)。

我如何使用点击来做到这一点?

到目前为止我唯一可行的选择是强制用户使用

python script.py load --exclude "one two three"

然后调用 exclude.split(),但更干净一些会更好。

它似乎不受支持,以您想要的方式,通过单击:

根据文档 Multi Value Options 必须具有 nargs 中指定的选项数量,因此 nargs=2 需要 2 个值。

此外,multiple options 不会否定多次传递选项的需要。

你最可能的解决方案是传递一个字符串并拆分,虽然我没有使用过太深的Click,所以有人可能有更好的解决方案。