2017-02-25 2 views
1

저는 꽤 오래 동안 argparse을 사용해 왔지만, click을 사용하려고합니다.파이썬 클릭 인자로 옵션을 사용합니다.

에 인수 이전에 명령 줄에 --을 전달하지 않고도 옵션과 유사한 인수를 사용해야한다고 어떻게 알 수 있습니까?

예 :

내가으로 이것을 실행할 수 있도록하려면
@cli.group() 
@click.argument('script') 
@click.argument('args', nargs=-1) 
def run(script, args): 
    # ... 

: 대신 같은 명령 줄을 사용 할 필요없이

mycli run foo.py arg1 --arg2 

args 목록에 --arg2 있습니다

mycli run -- foo.py arg1 --arg2 

답변

1

클릭 4.0 이후 가능합니다. 알 수없는 옵션을 무시하려면 클릭을 말하고 선택 사항을 수집하고 전달하려면 클릭해야합니다. 변경 사항이 적용된 예제가 있습니다.

코드 :

@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이 스크립트를 사용하기 때문에 스크립트에 도달하지 못합니다. –