Argparse: анализировать несколько подкоманд
Провел некоторое исследование, но не смог найти никакого рабочего решения. Я пытаюсь разобрать следующую командную строку, где 'test' и 'train'- это две независимые подкоманды, каждая из которых имеет разные аргументы:
./foo.py train -a 1 -b 2
./foo.py test -a 3 -c 4
./foo.py train -a 1 -b 2 test -a 3 -c 4
Я пытался использовать два подпарасера ("тест", "поезд"), но кажется, что только один может быть проанализирован в то время. Также было бы замечательно, чтобы эти подпарсеры были родителями основного синтаксического анализатора так, чтобы, например, команда '-a' не добавлялась к подпаразерам 'train' и 'test'.
Любое решение?
1 ответ
Это было задано ранее, хотя я не уверен, что лучший способ найти эти вопросы.
Весь механизм подпарсера предназначен для одной такой команды. Есть несколько вещей, на которые стоит обратить внимание:
add_subparsers
создает позиционный аргумент; В отличие отoptionals
Позиционные действия только один раз.add_subparsers выдает ошибку, если вы вызываете ее несколько раз
синтаксический анализ основан только на одном таком вызове
Одна из работ, которую мы предложили в прошлом, это "вложенные" или "рекурсивные" подпапки. Другими словами train
настроен так, что он также занимает подпарсер. Но есть сложность относительно того, требуются ли субпарсеры или нет.
Или вы можете обнаружить и вызвать несколько парсеров, минуя subparser
механизм.
С боковой панели
Многократный вызов одной и той же подкоманды в одной командной строке
а также