python - 如何在 Python 中循环 optparse.OptionGroup

标签 python python-2.6 optparse

我正在尝试循环访问一组特定的参数(仅限“-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)

附注我正在运行 Python 2.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)

关于python - 如何在 Python 中循环 optparse.OptionGroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41679493/

相关文章:

python - 意外类型 : <class 'pyspark.sql.types.DataTypeSingleton' > when casting to Int on a ApacheSpark Dataframe

python - 将字符串转换为八进制数的最pythonic方式

python - Word & Python - 创建目录

python - 从 Python 属性文件中读取 Celery 配置

python - 使用在每个实例级别而不是每个类定义的属性

python - 在 python 中覆盖 OptionParser 的 add_option 函数

python - 如何使用 Python 的 optparse 格式化位置参数帮助?

ruby - 如何通过 Homebrew 程序分发 ruby​​ 脚本

python - 将数据发布到网络进行处理

python - 创建列表字典