Подтвердить что ты не робот

Список Ppton Optparse

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

Например:

--groups one,two,three. 

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

4b9b3361

Ответ 1

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

Ответ 2

Ответ 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)

Ответ 3

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

  • Вы все еще можете использовать "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)

Ответ 4

С 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 --группа одна - группа вторая - группа три

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