2016-09-22 6 views
1

Проведено некоторое исследование, но не найдено ни одного рабочего решения. Я пытаюсь разобрать следующую командную строку, где «тест» и «поезд» являются двумя независимыми Подкоманды каждый из которых имеет различные аргументы:Argparse: разобрать несколько подкоманд

./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 

Я пытался с помощью двух subparsers («тест», 'поезд '), но кажется, что в то время можно было разобрать только один. Также было бы здорово, если бы родители-подмастеры основного анализатора были такими, чтобы, например, команда '-a' не должна быть добавлена ​​как к поездам подпараллеров, так и к тесту

Любое решение?

+0

Вы можете использовать 'с родителями, чтобы добавить общий аргумент несколько subparsers. Или вы можете определить '-a' для основного синтаксического анализатора. – hpaulj

ответ

0

Это было задано раньше, хотя я не уверен, что лучший способ найти эти вопросы.

Весь механизм subparser предназначен для одной такой команды. Есть несколько вещей, чтобы отметить:

  • add_subparsers создает позиционный аргумент; в отличие от optionals `позиционный действует только один раз.

  • «add_subparsers» вызывает ошибку, если вы вызываете его несколько раз

  • синтаксические построена вокруг только один такого вызова

Одна работа вокруг, что мы предложили в прошлое «вложенные» или «рекурсивные» субпары. Другими словами, train настроен так, что он тоже занимает подпараметр. Но есть осложнения относительно того, нужны ли подпарамеры или нет.

Или вы можете обнаружить и вызвать несколько парсеров, минуя механизм subparser.

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

Multiple invocation of the same subcommand in a single command line

и

Parse multiple subcommands in python simultaneously or other way to group parsed arguments