Пример проблемы
Если у меня есть список допустимых строк параметров, которые совместно используются несколькими аргументами, список записывается в нескольких местах в строке справки. Трудно читать:
def main():
elements = ['a', 'b', 'c', 'd', 'e', 'f']
parser = argparse.ArgumentParser()
parser.add_argument(
'-i',
nargs='*',
choices=elements,
default=elements,
help='Space separated list of case sensitive element names.')
parser.add_argument(
'-e',
nargs='*',
choices=elements,
default=[],
help='Space separated list of case sensitive element names to '
'exclude from processing')
parser.parse_args()
При запуске вышеуказанной функции с аргументом командной строки --help
она показывает:
usage: arguments.py [-h] [-i [{a,b,c,d,e,f} [{a,b,c,d,e,f} ...]]]
[-e [{a,b,c,d,e,f} [{a,b,c,d,e,f} ...]]]
optional arguments:
-h, --help show this help message and exit
-i [{a,b,c,d,e,f} [{a,b,c,d,e,f} ...]]
Space separated list of case sensitive element names.
-e [{a,b,c,d,e,f} [{a,b,c,d,e,f} ...]]
Space separated list of case sensitive element names
to exclude from processing
Что бы хорошо
Было бы неплохо, если бы можно было определить имя списка опций и в выводе справки написать имя списка опций в нескольких местах и определить его последним из всех. Теоретически это будет работать так:
def main_optionlist():
elements = ['a', 'b', 'c', 'd', 'e', 'f']
# Two instances of OptionList are equal if and only if they
# have the same name (ALFA in this case)
ol = OptionList('ALFA', elements)
parser = argparse.ArgumentParser()
parser.add_argument(
'-i',
nargs='*',
choices=ol,
default=ol,
help='Space separated list of case sensitive element names.')
parser.add_argument(
'-e',
nargs='*',
choices=ol,
default=[],
help='Space separated list of case sensitive element names to '
'exclude from processing')
parser.parse_args()
И при запуске вышеупомянутой функции с аргументом командной строки --help
она будет показывать нечто похожее на:
usage: arguments.py [-h] [-i [ALFA [ALFA ...]]]
[-e [ALFA [ALFA ...]]]
optional arguments:
-h, --help show this help message and exit
-i [ALFA [ALFA ...]]
Space separated list of case sensitive element names.
-e [ALFA [ALFA ...]]
Space separated list of case sensitive element names
to exclude from processing
sets in optional arguments:
ALFA {a,b,c,d,e,f}
Вопрос
Мне нужно:
- Замените {'l', 'i', 's', 't', 's'}, показанные с именем опции, в необязательных аргументах.
- В конце текста справки показывают раздел, поясняющий, из каких элементов состоит каждое имя опции.
Итак, я спрашиваю:
- Возможно ли это с помощью argparse?
- Какие классы мне нужно наследовать и какие методы мне нужно переопределить?
Я попытался посмотреть на источник argparse, но так как эта модификация выглядит довольно продвинутой, я не знаю, как начать.