我已经使用argparse
了很长一段时间,但我正在转换为使用click
。
如何告诉click
应该使用类似选项的参数,而不必在该参数之前在命令行上传递--
?
示例:
@cli.group()
@click.argument('script')
@click.argument('args', nargs=-1)
def run(script, args):
# ...
我希望能够将其作为:
运行mycli run foo.py arg1 --arg2
并在--arg2
列表中包含args
,而不必使用命令行:
mycli run -- foo.py arg1 --arg2
答案 0 :(得分:1)
这可以从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')
(Source)