如何在 Python 中循环遍历 optparse.OptionGroup

How to loop through optparse.OptionGroup in Python

我正在尝试循环访问某组参数(仅限“-p”)。 我在终端中声明它们如下:python program.py -p paramOne paramTwo。我的程序输出只有 paramOne,我不明白为什么。我的目标是获得以下输出:

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。我是运行Python2.6.6

如果不指定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

How many arguments of type type should be consumed when this option is seen. If > 1, optparse will store a tuple of values to dest.

因此,应修改最后一个循环以检查 tuple 以根据需要打印:

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