2017-05-16 1 views
1

파이썬의 argparse 라이브러리를 사용하여 처음 몇 개의 명령 줄 인수를 처리하여 다른 명령 줄 인수에 대한 선택 목록을 생성하고 싶습니다.Python argparse : 다른 인수를 추가하기 전에 특정 인수 처리

argparse가 예상하지 못한 추가 인수에 대해 불평하지 않고 처음 몇 개의 인수를 처리하려면 어떻게합니까 (나중에 추가 할 계획입니까?)?

예를 들어, 나는 그는 API의 사용 가능한 속성에 액세스하는 데 사용하는 명령 줄에서 사용자 이름과 암호를 유도 할 수있는 스크립트가 다음 세 번째 인수의 값을 제한하기 위해이 목록을 사용

import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument('username', help='Your username.') 
parser.add_argument('password', help='Your password.') 
args = parser.parse_args() # Error here because a third argument exists on the command-line 

response = requests.get(
    url='https://api.example.com/properties', 
    auth=(args.username, args.password) 
) 

parser.add_argument(
    'property', 
    choices=response.json()['properties'], # Validates the input 
    help='The property you want to access.' 
) 
args = parser.parse_args() 

나는 모든 인수를 한 번에 추가 한 다음 세 번째 인수를 직접 수동으로 유효화 할 수 있다는 것을 알고 있지만 기본적으로 argparse 라이브러리에서 요구하는 것을 수행 할 방법이 있는지 궁금합니다.

+0

http://stackoverflow.com/questions/20165843/argparse-how-to-handle-variable-number-of-arguments-nargs에서 질문에 대한 답변을 확인 했습니까? –

+0

'argparse'는 파서를 sugests로 이름입니다. 구문 분석 할 데이터를 확인하는 기능이 있지만이 확인에는 한계가 있습니다. HTTP 조회를 수행하는 것은이 한계를 벗어납니다. 코드에서해야합니다. 또한 사용자의 접근 방식이 자격 증명을 인수로 제공하지 않고 도움말을 표시 할 수는 없지만 사용자가 도움말을 볼 때까지는 방법을 알지 못한다고 생각하십시오. –

+1

@ Chih-HsuJackLin 그것은 내 질문에 직접 대답하지 않지만, 받아 들인 대답 안에서 (필자가 알지 못했던)'parse_known_args()'함수의 사용을 볼 수 있는데, 나는 인수의 덩어리를 파싱하는데 사용할 수있다. 한 번에. @KlausD. 불완전한 도움말 문서에 대한 귀하의 요지를 봅니다. 한 번에 모든 인수를 추가하고 직접 검증 할 것입니다. 둘 다 고마워. – ezgoodey

답변

1
parser = argparse.ArgumentParser() 
parser.add_argument('username', help='Your username.') 
parser.add_argument('password', help='Your password.') 
parser.add_argument(
    'property', 
    help='The property you want to access.' 
) 
args = parser.parse_args() 

response = requests.get(
    url='https://api.example.com/properties', 
    auth=(args.username, args.password) 
) 
allowed_properties = response.json()['properties'] 
if args.property not in allowed_properties: 
    parser.error('property not in allowed properties') 

choices은 복잡한 테스트가 아닙니다. 모든 입력을 파싱하고이 특별한 경우를 테스트하는 것이 좋습니다. 전반적으로 나는 당신에게 더 나은 제어와 더 나은 도움과 오류 표시를 줄 것이라고 생각합니다.

parse_known_args 접근 방법은 배우고 가끔씩 사용하는 것이 좋지만이 경우에는 그다지 좋지 않다고 생각합니다. parser에 모든 인수 테스트를 포함하기위한 추가 포인트가 없습니다.

관련 문제