2017-01-16 7 views
0

특정 그룹의 매개 변수 ('-p'만)를 반복하려고합니다. 터미널에서 다음과 같이 선언합니다 : python program.py -p paramOne paramTwo. 내 프로그램 출력은 paramOne이고 나는 그 이유를 이해하지 못한다. 내 목표는 다음과 같은 결과를 얻는 것입니다 :Python에서 optparse.OptionGroup을 반복하는 방법

paramOne 
paramTwo 

누구든지 내 코드에서 오류가 어디 있는지 말해 줄 수 있습니까?

# Parcing definitions 
parser = optparse.OptionParser() 
groupParam = optparse.OptionGroup(parser, 'Output handling') 
parser.add_option('-q', '--quiet', action='store_false', dest='verbose', default=True, 
       help=('don\'t print status messages to stdout')) 
groupParam.add_option('-p', '--parameters', action='store', dest='paramNum', type='string', 
       help=('specify number of parameters (Optional)')) 

parser.add_option_group(groupParam) 

(options, args) = parser.parse_args() 


for groupParam1 in groupParam.option_list: 
    print getattr(options, groupParam1.dest) 

추신 : 여기

코드입니다 012. Python 2.6.6을 실행하고 있습니다.

답변

1

nargs을 지정하지 않으면 1이 기본값으로 사용됩니다. 하나의 위치 인수 만 사용합니다.

이 개 값을 얻을 수 nargs=2를 지정

groupParam.add_option(
    '-p', '--parameters', action='store', dest='paramNum', type='string', 
    nargs=2, # <--- 
    help=('specify number of parameters (Optional)') 
) 

documentation에 따르면이 옵션을 볼 수 인 경우

이 형 타입의 많은 인수가 소비하는 방법. > 1 인 경우, optparse는 값의 튜플을 dest에 저장합니다.

때문에, 마지막 루프는 사용자가 원하는대로 tuple 인쇄 확인하도록 수정해야합니다 대답에 대한

for groupParam1 in groupParam.option_list: 
    values = getattr(options, groupParam1.dest) 
    if isinstance(values, tuple): 
     for value in values: 
      print(value) 
+0

감사합니다. 이것은 실제로 작동하지만, (언급하지 않았다) 나의 주장은 역동적 일 것이다 (0 - 약 20). 그래서 nargs가 어떻게 동적 일 수 있는가? – Newskooler

+0

@Newskooler, 동적 nargs ('?','*','+')를 사용하려면 [argparse'] (https://docs.python.org/2/library/argparse.html)를 사용해야합니다. 하지만 유감스럽게도 Python 2.7 이상에서 사용할 수 있습니다. https://docs.python.org/2/library/argparse.html#nargs를 참조하십시오. – falsetru