【问题标题】:Python Optparse listPython Optparse 列表
【发布时间】:2008-12-24 18:54:52
【问题描述】:

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

例如:

--groups one,two,three. 

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

【问题讨论】:

    标签: python optparse


    【解决方案1】:

    再次,为了存档的完整性,扩展上面的例子:

    • 您仍然可以使用“dest”来指定选项名称以供以后访问
    • 在这种情况下不能使用默认值(参见Triggering callback on default value in 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)
    

    【讨论】:

      【解决方案2】:

      使用 optparse,要获取列表值,您可以使用操作 'append':

      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

      ['一','二','三']

      【讨论】:

        【解决方案3】:

        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)
        

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2011-11-22
            • 1970-01-01
            • 1970-01-01
            • 2011-08-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多