Python Optparse list
Asked Answered
S

4

40

I'm using the python optparse module in my program, and I'm having trouble finding an easy way to parse an option that contains a list of values.

For example:

--groups one,two,three. 

I'd like to be able to access these values in a list format as options.groups[]. Is there an optparse option to convert comma separated values into a list? Or do I have to do this manually?

Syncopated answered 24/12, 2008 at 18:54 Comment(0)
Q
40

Look at option callbacks. Your callback function can parse the value into a list using a basic optarg.split(',')

Quirites answered 24/12, 2008 at 19:3 Comment(0)
E
84

S.Lott's answer has already been accepted, but here's a code sample for the archives:

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)
Elberfeld answered 24/12, 2008 at 21:50 Comment(0)
Q
40

Look at option callbacks. Your callback function can parse the value into a list using a basic optarg.split(',')

Quirites answered 24/12, 2008 at 19:3 Comment(0)
K
12

Again, just for the sake of archive completeness, expanding the example above:

  • You can still use "dest" to specify the option name for later access
  • Default values cannot be used in such cases (see explanation in Triggering callback on default value in optparse)
  • If you'd like to validate the input, OptionValueError should be thrown from foo_callback

The code (with tiny changes) would then be:

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)
Kreg answered 27/3, 2015 at 12:53 Comment(0)
D
10

With optparse, to get a list value you can use action '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

Then call your program like this:

$ python demo.py --group one --group two --group three

['one', 'two', 'three']

Delfinadelfine answered 16/12, 2016 at 18:38 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.