39

我在我的程序中使用了 python optparse 模块,但我无法找到一种简单的方法来解析包含值列表的选项。

例如:

--groups one,two,three. 

我希望能够以列表格式访问这些值,如options.groups[]. 是否有 optparse 选项将逗号分隔值转换为列表?还是我必须手动执行此操作?

4

4 回答 4

84

S.Lott 的回答已被接受,但这里是档案的代码示例:

def foo_callback(option, opt, value, parser):
  setattr(parser.values, option.dest, value.split(','))

parser = OptionParser()
parser.add_option('-f', '--foo',
                  type='string',
                  action='callback',
                  callback=foo_callback)
于 2008-12-24T21:50:34.917 回答
40

查看选项回调。您的回调函数可以使用基本的方法将值解析为列表optarg.split(',')

于 2008-12-24T19:03:51.897 回答
11

同样,为了存档的完整性,扩展上面的示例:

  • 您仍然可以使用“dest”来指定选项名称以供以后访问
  • 在这种情况下不能使用默认值(参见在 optparse 中触发默认值回调中的解释)
  • 如果您想验证输入,应该从 foo_callback 抛出 OptionValueError

代码(有微小的变化)将是:

def get_comma_separated_args(option, opt, value, parser):
    setattr(parser.values, option.dest, value.split(','))

parser = OptionParser()
parser.add_option('-f', '--foo',
                  type='string',
                  action='callback',
                  callback=get_comma_separated_args,
                  dest = foo_args_list)
于 2015-03-27T12:53:43.283 回答
10

使用 optparse,要获取列表值,您可以使用操作“附加”:

from optparse import OptionParser
parser = OptionParser()
parser.add_option("--group",
                  action="append",
                  dest="my_groups")
(options, args) = parser.parse_args()
print options.my_groups

然后像这样调用你的程序:

$ python demo.py --group 1 --group 2 --group 3

['一二三']

于 2016-12-16T18:38:16.157 回答