Click
과 함께 app을 python 3.6에 작성하고 있습니다. 내가 찾을 수없는 오류가있는 것 같습니다. 아래 코드를 게시했습니다.python click app이 "누락 된 인수"표시와 함께 실패했지만 문제를 찾을 수 없습니다.
python clickapp.py --help
모두가 좋은 :
문제는 내가 입력 할 때이다. 내가
python clickapp.py simplerequest --help
를 입력 할 때하지만 내가 인수 "디렉토리"를 잃었 나타내는 오류를 얻을 수 있지만, 오류의 원인을 표시 할 역 추적이 없습니다. 정확한 출력은 다음과 같습니다.
Usage: clickapp.py [OPTIONS] STARTDATE ENDDATE DIRECTORY COMMAND [ARGS]...
Error: Missing argument "directory".
다음은 내가 사용했던 코드입니다. 이것은 파일 이름이 clickapp.py
인 최소한의 예입니다.
import click
@click.group()
@click.argument('startdate')
@click.argument('enddate')
@click.argument('directory', type=click.Path())
@click.pass_context
def cli(ctx,
startdate,
enddate,
directory):
ctx.obj['directory'] = directory
ctx.obj['startdate'] = startdate
ctx.obj['enddate'] = enddate
@click.command()
@click.argument('arg1', type=str)
@click.argument('arg2', type=click.Path(exists=True))
@click.argument('arg3', type=int)
@click.pass_context
def SimpleRequest(ctx,
arg1,
arg2,
arg3):
"""Simple request processor"""
ctx.obj['arg1'] = arg1
ctx.obj['arg2'] = arg2
ctx.obj['arg3'] = arg3
cli.add_command(SimpleRequest)
if __name__ == '__main__':
cli(obj={})
누구든지 오류의 출처를 볼 수 있습니까?
내가 그 문제의 원인이 될 수 있는지 확인하기 위해
나는 몇 가지를 시도했다. 그러나 그것은 아무것도 바뀌지 않았습니다.arg2
에type=click.Path(exists=True)
을 제거 :또한 사전에
ctx
사전에 변수를 삽입하는 것과 관련된 유효성 검사 로직을 제거하려고했으나 도움이되지 않았습니다.
@Stephen 감사합니다. 네가 한 말만 기대 했어. 기본적으로 clickapp.py에는 모든 명령에 공통적 인 몇 가지 인수가 있으며 각 명령에는 몇 가지 특정 인수가 있습니다. 그래서 나는'python clickapp.py startdate enddate directory simplerequest arg1 arg2 arg3'을 원한다. 그것은 어쨌든 아이디어였습니다. 더 나은 표준 방법이 있다고 생각되면 전달하십시오. – krishnab
아, 그래서'startdate, enddate,'및'directory' 옵션을 만들 수 있습니다. 그것들이 채워지지 않으면 합리적인 기본값을 가질 수 있기 때문에 그렇게 될 것입니다. 그렇다면'simplerequest'가 첫 번째 인수가 될 것입니다. 좋아. 도와 줘서 고마워. – krishnab