Как разобрать повторяемую опцию с двумя аргументами с помощью argparse Python?

Как я могу получить argparse проанализировать опцию с двумя аргументами, которые могут существовать несколько раз? Как это:

$ cmd --repo origin here --repo other there --repo upstream url3

И проанализированные аргументы должны быть доступны, например, так:

args.repo = [('origin', 'here'), ('other', 'there'), ('upstream', 'url3')]

2 ответа

Решение
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('--repo', nargs=2, action='append')
parser.parse_args('--repo origin here --repo other there'.split())

Результат:

Namespace(repo=[['origin', 'here'], ['other', 'there']])

Вы должны использовать действие добавления.

Из архивной документации:

append - Это сохраняет список и добавляет каждое значение аргумента в список. Это полезно, чтобы опция была указана несколько раз.

Пример использования:

>>> parser = argparse.ArgumentParser()
>>> parser.add_argument('--foo', nargs='*', action='append')
>>> parser.parse_args('--foo 1 2 --foo 3 4'.split())

Namespace(foo=[['1', '2'], ['3', '4']])

Источник: https://docs.python.org/3/library/argparse.html

Вы также можете взглянуть на проект docopt, который я считаю лучшим пакетом анализатора аргументов Python:

Другие вопросы по тегам