2017-04-03 3 views
0

그래서 파이썬 클릭 라이브러리를 사용하여 간단한 명령 행 도구를 작성하는 것이 매우 간단하다고 생각했습니다. 나는 나와 함께 클릭하지 않는 뭔가에 붙어있는 것 같습니다. 나는 다음 코드를 가지고있다 :python의 클릭 라이브러리를 사용할 때이 TypeError를 제거하려면 어떻게해야합니까?

import click 
import json 
import os.path 
import sys 


@click.command() 
@click.option('--count', default=1, help='Number of greetings.') 
@click.option('--name', prompt='Your name', 
       help='The person to greet.') 
@click.argument('title') 
@click.argument('category') 
@click.argument('tech') 
@click.argument('problemNotes') 
@click.argument('solutionNotes') 


def hello(count, name, title, category, tech, problemNotes, solutionNotes): 
    print(tech + problemNotes + solutionNotes) 


if __name__ == '__main__': 
    hello() 

이것은 꽤 직설적이다. CL 도구는 몇 가지 옵션과 인수를 취한 다음 일부를 인쇄해야합니다. 나는 다음 도구를 호출 내 터미널에서 다음을 입력합니다

python bugbook.py --name="steve" "Annoying stack bug" "compile bug" "xcode" "annoying" "get meowed" 

그러나 나는 다음과 같은 오류 얻을 :

Traceback (most recent call last): 
    File "bugbook.py", line 22, in <module> 
    hello() 
    File "/Library/Python/2.7/site-packages/click/core.py", line 722, in __call__ 
    return self.main(*args, **kwargs) 
    File "/Library/Python/2.7/site-packages/click/core.py", line 697, in main 
    rv = self.invoke(ctx) 
    File "/Library/Python/2.7/site-packages/click/core.py", line 895, in invoke 
    return ctx.invoke(self.callback, **ctx.params) 
    File "/Library/Python/2.7/site-packages/click/core.py", line 535, in invoke 
    return callback(*args, **kwargs) 
TypeError: hello() got an unexpected keyword argument 'solutionnotes' 

이상한을, 나는 생각한다. 실제로 주요 함수를 호출 올바른 매개 변수 또는 무언가를 전달하는 데 실패

if __name__ == '__main__': 
    hello() 

,하지만 난 땜질을 시도하고 그냥 작업을 얻을 수 없습니다 :이 오류에 의해 casued 것 같다. 뻔한 것은 내가 무엇을 놓치고 있는가 ??

+0

참고 solutionNotes'' : 예를 들어, 소문자로 토큰을 변환하는 기능을 가질 수있다 . 올바른 코드를 붙여 넣거나 사용했는지 다시 확인하십시오. – DyZ

+0

예 - 이것은 이상하게 생각합니다. 코드에서 어디에서 'solutionnotes'를 사용합니까? 'solutionNotes'만 사용합니다. 그래서 cl이 다른 케이스로이 오류를 발생 시키면 STRANGE와 아마도 단서가됩니다. – frankunderwoodisreal

+0

글쎄, 내 코드가 모두 소문자로 처리되어 오류를 없앴습니다. - hmmm – frankunderwoodisreal

답변

1

토큰 정상화

새로운 버전 2.0입니다.

클릭 2.0부터는 토큰 정규화에 사용되는 함수를 제공 할 수 있습니다. 토큰은 옵션 이름, 선택 값 또는 명령 값입니다. 예를 들어 대소 문자를 구분하지 않는 옵션을 구현하는 데 사용할 수 있습니다.

이 기능을 사용하려면 컨텍스트에 토큰의 정규화를 수행하는 함수를 전달해야합니다. '파일의 인수가`라는 이름의 동안, solutionnotes'`'파이썬 '에 대해 불평하는 것이

CONTEXT_SETTINGS = dict(token_normalize_func=lambda x: x.lower()) 

@click.command(context_settings=CONTEXT_SETTINGS) 
@click.option('--name', default='Pete') 
def cli(name): 
    click.echo('Name: %s' % name) 

Read more