Пример проблемы
Если у меня есть список допустимых строк параметров, который разделяется между несколькими аргументами, список записывается в нескольких местах в строке справки. Сложнее читать:
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, но поскольку эта модификация кажется довольно продвинутой, я не знаю, как это сделать.