2014-07-11 6 views
0

입력 중 하나를 기반으로 특정 객체를 초기화하고 싶습니다. 이러한 개체의 값은 나머지 인수에 대한 기본값이됩니다. parser.parse_args() 전에 인수 중 하나의 값이 필요합니다. 어떻게 파이썬 argparse 모듈로 이것을 달성 할 수 있습니다. 모든 옵션은 하나의 명령 행으로 제공됩니다.다른 인수의 값을 기반으로 인수를 추가하십시오.

기본값은 도움이 필요합니다. 이 값은 객체에서옵니다.

def cli(): 
    option1 = None 
    parser = argparse.ArgumentParser() 
    parser.add_argument('--option1', help=argparse.SUPPRESS) 
    #option1 = value from --option1 
    abc(option1) 
    parser.add_argument('--option2', default=abc.getValue()) 
    args = parser.parse_args() 

어떻게하면됩니까?

+3

가능한 모든 인수를 구문 분석하여 선택적 인수에 대해 기본값을 'None'으로 설정 한 다음 필요에 따라 값을 업데이트 할 수 있습니다. 당신이 버리는 몇 가지 변수를 초기화하는 데 아무런 해가 없습니다. – Geekfish

+0

모든 명령 줄 인수는 사용하는 옵션 처리 모듈에 관계없이 처음에는'sys.argv' 목록에 저장됩니다. 원하는 인수에 대해 해당 목록을 스캔하여 값을 얻을 수 있습니다. – TheSoundDefense

+0

옵션의 기본값은 사용자의 도움말에 표시되어야합니다. 기본값은 오브젝트 초기화에 따라 변경됩니다. 나는 실제 질문도 편집하고있다. – user1588281

답변

0

가독성/논리를 위해 불필요한 옵션이 있으면 희생해야합니다. 당신이 옵션을 파서이 완료되기 전에 sys.argv에서 일을하려고하면

그것을 보이는 사람이 생각하는 것 (당신을 줄 것이다 당신이 요구하는지) : 는 "왜 그런 짓 아무튼? 이해가 안돼. " 나는 이런 식으로 일을 제안

이 (@Geekfish의 의견을 바탕으로) :

import argparse 

def get_option2(option1, option2): 
    if option2 is not None: # The user specified an option 
     return option2 
    else: # The user did not specify an option 
     option2 = abc(option1).getValue() # set option2 based on option1 
     return option2 

parser = argparse.ArgumentParser() 
parser.add_argument('--option1', help=argparse.SUPPRESS) 
parser.add_argument('--option2', default=None) 

args = parser.parse_args() 

option2 = get_option2(args['option1'], args['option2']) 
+0

죄송하지만 처음에는이 질문에 포함되지 않았습니다. 도움말에 기본값을 표시하고 싶습니다. 그래서 나는 그들을 None으로 만들 수 없으며 나중에 값을 할당 할 수 없습니다. 나는 이것을 파서에서 사용하고있다. formatter_class = argparse.ArgumentDefaultsHelpFormatter – user1588281

+0

아. heh, 나는 그다지 확실히 모른다. 나는 그것이 문서에 있다고 확신한다. – sheeptest

0

그것은 가장 효율적인 아니지만, 당신은 옵션 1을 정의 후 알려진 옵션을 구문 분석 할 수 있습니다, 다음 추가 옵션 2를 파서와 재분석합니다. 일반적으로

def cli(): 
    option1 = None 
    parser = argparse.ArgumentParser() 
    parser.add_argument('--option1', help=argparse.SUPPRESS) 
    args, remaining = parser.parse_known_args() 

    abc(args.option1) 
    parser.add_argument('--option2', default=abc.getValue()) 
    args = parser.parse_args() 

,이 방법을 사용하면 피할 것을 요구한다 (또는 적어도 결과의 인식)가 두 번 트리거되기 때문에, 부작용이 옵션 핸들러.

관련 문제