2012-10-30 7 views
1

대신 하나 개의 인수를 argparse : 나는 동의어 옵션 "-a"로 그들 모두를 사용하려면파이썬 - 내가 옵션을 몇 가지 다른 예를 들어

parser.add_argument('-b', action="store_true") 
parser.add_argument('-c', action="store_true") 
parser.add_argument('-d', action="store_true") 

. 가능한가? 사용자 지정 작업을 함께 할 수

import argparse 
parser = argparse.ArgumentParser() 
parser.add_argument('-b', action="store_true") 
parser.add_argument('-c', action="store_true") 
parser.add_argument('-d', action="store_true") 
parser.add_argument('-a', action="store_true") 
args = parser.parse_args() 
if args.a: args.b = args.c = args.d = True 

을 다른 방법으로,하지만 난 그게 과잉 생각 :

답변

3

가 나는 parse_args() 후 이렇게 간단한 생각

import argparse 
class AllAction(argparse.Action): 
    def __call__(self, parser, args, values, option_string = None): 
     # print '{n} {v} {o}'.format(n = args, v = values, o = option_string) 
     for param in ['a', 'b', 'c', 'd']: 
      setattr(args, param, True) 

parser = argparse.ArgumentParser() 
parser.add_argument('-b', action="store_true") 
parser.add_argument('-c', action="store_true") 
parser.add_argument('-d', action="store_true") 
parser.add_argument('-a', action = AllAction, nargs = '?') 
args = parser.parse_args() 
print(args) 
+0

예, 그것은 가능 해결책. 나는 그것을 할 수있는 기본 방법이있을 것이라고 생각했다. 고마워. – Antigluk

+0

+1. 당신은 저와 똑같은 것을 썼지 만 더 빠르고 완전한 샘플 코드로 ... – abarnert