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 механизм.

С боковой панели

Многократный вызов одной и той же подкоманды в одной командной строке

а также

Разбор нескольких подкоманд в python одновременно или другой способ группировки проанализированных аргументов

Другие вопросы по тегам