2017-01-16 102 views
0

我通過一定的組參數(僅適用於「-p」)試圖循環。 我在終端聲明如下:python program.py -p paramOne paramTwo。我的程序輸出只有paramOne,我不明白爲什麼。我的目標是讓下面的輸出:如何通過optparse.OptionGroup循環在Python

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) 

P.S.我正在運行的Python 2.6.6

回答

1

如果不指定nargs,它採用1作爲默認值;只消耗一個位置參數。

指定nargs=2獲得2個值:

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

根據documentation

如何使用此選項時 看到type類型的很多爭論應食用。 如果> 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,你需要使用['argparse'(https://docs.python.org/2/library/argparse.html)使用動態NARGS('?','*','+'),但不幸的是,它在Python 2.7+中可用。請參閱https://docs.python.org/2/library/argparse.html#nargs – falsetru