代码之家  ›  专栏  ›  技术社区  ›  jpyams David Thompson

nargs=*相当于单击中的选项

  •  26
  • jpyams David Thompson  · 技术社区  · 7 年前

    是否有等同于 argparse nargs='*' Click?中可选参数的功能?

    我正在编写一个命令行脚本,其中一个选项需要能够接受无限数量的参数,例如:

    foo --users alice bob charlie --bar baz
    

    所以 users 可能是 ['alice', 'bob', 'charlie'] bar 可能是 'baz' .

    在里面 argparse ,我可以指定多个可选参数,通过设置 nargs=“*” .

    >>> parser = argparse.ArgumentParser()
    >>> parser.add_argument('--users', nargs='*')
    >>> parser.add_argument('--bar')
    >>> parser.parse_args('--users alice bob charlie --bar baz'.split())
    Namespace(bar='baz', users=['alice', 'bob', 'charlie'])
    

    我知道单击允许您指定参数 accept unlimited inputs 按设置 nargs=-1 ,但当我尝试设置可选参数 nargs 到-1,我得到:

    TypeError:选项不能有nargs<0

    是否有办法使Click accept为选项指定数量的参数?

    更新:

    我需要能够在接受无限参数的选项之后指定选项。

    更新:

    @斯蒂芬·劳赫的回答回答了这个问题。然而,我不建议使用我在这里要求的方法。我的功能请求是 intentionally not implemented in Click ,因为它可能导致意外行为。 Click's recommended approach is to use multiple=True :

    @click.option('-u', '--user', 'users', multiple=True)
    

    在命令行中,它将如下所示:

    foo -u alice -u bob -u charlie --bar baz
    
    3 回复  |  直到 5 年前