2012-10-15 5 views
-1

python 스크립트에서 세 가지 위치 인수와 두 개의 선택적 인수 ('help'포함)가 필요합니다. 그래서 내 필요argparse - python

가 올바른 다음과 같다 :

./myscript.py ONE TWO THREE 
./myscript.py --list 

잘못된 : 나는 모든 위치 인수와 자체 argparse 사용하여 상호 배타적으로 선택적 인수를 만들고 싶어

./myscript.py ONE TWO THREE --list 

.

+1

안녕하십니까. 귀하의 질문은 ServerFault에 대한 주제와 관련이 없으며 더 많은 코딩 기반의 StackOverflow를 사용하는 것이 좋습니다. – tombull89

+0

http://docs.python.org/howto/argparse.html#id1 –

+0

조건을 사용하여 솔루션을 만들었습니다. 내가 아는 한, argparse 자체를 사용하여이를 수행 할 수있는 방법은 없습니다. argparse의 현재 버전은 하나의 조건에 대해서만 상호 독점 옵션을 지원합니다. [A | B]와 같지 않고 [A, B, C | D] – Suku

답변

2

이 당신이 원하는 것을 approxmates : 나는 이후 사용자 정의 사용을 포함 모두 --listpos가 주어지면 아무 것도 지정하지 않으면

class Three(argparse.Action): 
    # custom action that requires 0 or 3 values 
    def __call__(self,parser,namespace,values,option_string): 
     if len(values) in [0,3]: 
      setattr(namespace, self.dest, values) 
     else: 
      raise argparse.ArgumentError(self,'must have 3 values') 

custom = 'usage: %(prog)s [-h] (--list | ONE TWO THREE)' 
p=argparse.ArgumentParser(prog='PROG',usage=custom) 
g=p.add_mutually_exclusive_group(required=True) 
g.add_argument('--list',action='store_true') 
g.add_argument('pos',nargs='*',default=[],action=Three) 

그것은, 오류가 발생합니다, 또는 pos 값의 수는 3 아니다 기본값은

usage: PROG [-h] (--list | pos [pos ...]) 
관련 문제