В настоящее время у меня есть инструмент CLI, который я создаю, и я хочу дать ему эту форму, похожую на эту.
usage: PROG SUBPARSER [-h]
(-l {optionA,optionB,optionC} | -s TERM [-a, [-b, [-c]]])
Что я делаю, так это то, что у меня есть основной cli
модуль, который будет импортировать всю функцию arguments_parser из всех модулей, которые я хочу предоставить пользователю, и динамически добавлять их восновной синтаксический анализатор как sub parsers
приведенный ниже код Python, он немного от функции, которая добавляет синтаксический анализатор к основному синтаксическому анализатору, будучи анализатором объекта типа ArgumentParser
, который может быть корневым синтаксическим анализатором или подпрограммойсинтаксический анализатор.(Я делаю это для каждого модуля, поэтому их методы отображаются как CLI).
Теперь, что я пытаюсь сделать в данном конкретном случае, это получить команду, скажем, PROG
с первым аргументом SUBPARSER
, который имеет две (возможно, более) взаимоисключающие последовательности аргументов (безсоздание новых подпарсеров), говоря, что у меня есть две функции, search
и list
, так что поиск и список могут иметь общие аргументы (которые будут относиться к подпарсеру, а не к группе), но есть также флаги и аргументы, которыепредназначены для использования исключительно с --list
или --search
, для создания команд типа
PROG SUBARSER --list optionA -a -o -b
PROG SUBARSER --list optionA -a -o
PROG SUBARSER --list optionA -a -b
PROG SUBARSER --list optionA -a
PROG SUBARSER --list optionA
PROG SUBARSER --search TERM -a -k
PROG SUBARSER --search TERM -c
PROG SUBARSER --search TERM
Я пытался добавить вложенные группы с взаимоисключающими и регулярными группами в анализатор, но он не позволяетмне (или, по крайней мере, я не нашел пути), чтобы иметь взаимоисключающие группы с несколькими аргументами, а не только с одним флагом или атрибутом.
Это то, что я имею до сих пор, это не терпит крахи на самом деле работает с пользой.
usage: PROG SUBPARSER [-h]
[-l {all,draft,staged,publish,build,not-build} | -s SEARCH]
def argument_parser(parser):
"""Argument parser for SUBPARSER subgroup"""
group = parser.add_mutually_exclusive_group(required=False)
group.add_argument('-l','--list',
choices=status_criterias,
help='List the content specified',
default='all'
)
group.add_argument('-s','--search',
help='Search by title from all the content')
Пожалуйста, не обращайте внимания на строки помощи.
Любая помощь?