4

我已经使用argparse了很长一段时间了,但我正在过渡到使用click.

我如何知道click应该使用类似选项的参数,而不必--在该参数之前传递命令行?

例子:

@cli.group()
@click.argument('script')
@click.argument('args', nargs=-1)
def run(script, args):
  # ...

我希望能够将其运行为:

mycli run foo.py arg1 --arg2

--arg2args列表中,而不必使用命令行:

mycli run -- foo.py arg1 --arg2
4

1 回答 1

4

自 Click 4.0 以来,这是可能的。您需要告诉 click 忽略未知选项,并且您希望收集并传入选项。这是您的示例,其中进行了相关更改。

代码:

@click.group()
@click.option('--arg')
def cli(arg):
    click.echo('cli arg: %s' % arg)
    pass

@cli.command(context_settings=dict(
    ignore_unknown_options=True,
    help_option_names=[],
))
@click.argument('script')
@click.argument('args', nargs=-1, type=click.UNPROCESSED)
def run(script, args):
    click.echo('script: %s' % script)
    click.echo(args)

测试:

cli('--arg 3 run foo.py --arg 5 arg1 --arg2 --arg 4 --help'.split())

产生:

cli arg: 3
script: foo.py
('--arg', '5', 'arg1', '--arg2', '"--arg', '4"', '--help')

来源

于 2017-02-25T23:58:12.197 回答