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