2017-01-16 5 views
0

特定のパラメータグループ( '-p'のみ)をループしています。 端末で次のように宣言します:python program.py -p paramOne paramTwo。私のプログラムの出力はparamOneであり、私はその理由を理解していません。私の目標は、次の出力を得ることです:Pythonでoptparse.OptionGroupをループする方法

私のコードのどこにエラーがありますか教えてください。ここで

はコードです:

# 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が使用されます。 1つの位置引数のみを消費します。

2つの値を取得するために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

関連する問題