Python Optparse список - PullRequest
       9

Python Optparse список

38 голосов
/ 24 декабря 2008

Я использую модуль python optparse в своей программе, и у меня возникают проблемы с поиском простого способа разбора опции, содержащей список значений.

Например:

--groups one,two,three. 

Я бы хотел иметь возможность доступа к этим значениям в виде списка как options.groups[]. Есть ли опция optparse для преобразования значений, разделенных запятыми, в список? Или я должен сделать это вручную?

Ответы [ 4 ]

83 голосов
/ 25 декабря 2008

Ответ С. Лотта уже принят, но вот пример кода для архивов:

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)
39 голосов
/ 24 декабря 2008

Посмотрите на опцию обратных вызовов . Ваша функция обратного вызова может анализировать значение в список, используя базовый optarg.split(',')

11 голосов
/ 27 марта 2015

Опять просто для полноты архива, расширив приведенный выше пример:

  • Вы все еще можете использовать "dest", чтобы указать имя опции для последующего доступа
  • Значения по умолчанию не могут использоваться в таких случаях (см. Объяснение в Запуск обратного вызова для значения по умолчанию в optparse )
  • Если вы хотите проверить ввод, OptionValueError следует выбросить из foo_callback

Код (с небольшими изменениями) будет:

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)
8 голосов
/ 16 декабря 2016

С помощью 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 - первая группа - вторая группа - третья группа

['один', 'два', 'три']

...