#python #parameters #arguments #command-line-interface #argparse
Вопрос:
У меня есть взаимоисключающая группа, из которой пользователь может выбирать --execute, --delete, --create
. Как я могу сделать аргументы доступными только для определенных групп? Например --execute {filename}
, --create -fn {filename} -p {path}
И. --delete {filename}
Как я могу сгруппировать необязательные аргументы, чтобы их можно было использовать только в определенной группе?
Комментарии:
1. Взгляните на субпарсеры
2. Конечно, но как бы я это реализовал
add_mutually_exclusive_group
, если бы не было примера? @Вомбат3. Команды из вспомогательных анализаторов уже являются взаимоисключающими. Вам не нужна эта функция.
4. Ладно! Но тогда это невозможно использовать
-e
? Написаниеexecute
требует времени и немного раздражает…. @Вомбат5. Взаимоисключающие группы являются плоскими — xor. Они не реализуют какие-либо какие-либо/все подгруппы.
Ответ №1:
Три «опции» --execute
--delete
и --create
выглядят так , как будто они должны быть подкомандами, а не необязательными флагами.
Для этого используйте ArgumentParser.add_subparsers()
from argparse import ArgumentParser
parser = ArgumentParser()
sub = parser.add_subparsers()
execute = sub.add_parser('execute')
execute.add_argument('filename')
create = sub.add_parser('create')
create.add_argument('-fn')
create.add_argument('-p')
Использование затем
program execute {filename}
program create -fn {filename} -p {path}
Вы даже можете создать псевдоним для вспомогательных анализаторов:
sub.add_parser('execute', aliases=['e'])
Это также позволяет вам вызывать программу следующим образом:
program e {filename}
Примечание:
Невозможно использовать --execute
или -e
в качестве команды для вспомогательного синтаксического анализатора, поскольку при вводе program --execute {filename}
--execute
часть интерпретируется как флаг для корневого синтаксического анализатора, а не как вспомогательная команда.