2017-02-25 7 views
1

私は今かなりの間​​を使用していましたが、私はclickを使用しています。Python clickは引数としてオプションを消費します

clickに、その引数の前にコマンドラインで--を渡すことなく、オプションのような引数を使用する必要があることをどのように伝えることができますか?

例:

:代わりとして、コマンドラインを使用するので、

mycli run foo.py arg1 --arg2 

argsリストで--arg2を持っている:

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

私のようにこれを実行できるようにしたいです

mycli run -- foo.py arg1 --arg2 

答えて

1

クリック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

+0

ありがとうございました!どのドキュメントが最新のドキュメントであるかわからない、[click.pocoo.org](http://click.pocoo.org/5/advanced/#forwarding-unknown-options)のページへのリンク –

+0

最新は '6.7です':http://pocoo-click.readthedocs.io/en/latest/changelog/ –

+0

残念ながら、未知のオプションは無視されます。しかし、私は 'script'引数の後に*すべての*引数を無視したいと思います。たとえば、私のコマンドから呼び出すスクリプトが '--help'引数を受け入れるならば、Clickはそれを消費するのでスクリプトには到達しません。 –

関連する問題