Я пытаюсь создать команду типа
prog [-h] [-i ID [ID ...]] | -x [SOMETHING]
{cmd1,cmd2,cmd3}...
Итак, в основном на верхнем уровне у меня есть синтаксический анализатор, который имеет взаимную исключающую группу для параметров -i и -x, а затем, следуя этим (и, возможно, другим) параметрам, у меня есть команда, которую я хочу запустить. Каждая команда имеет свой собственный набор параметров, которые они используют. Я могу заставить команды нормально работать с add_subparsers()
, но проблема, с которой я сталкиваюсь, заключается в том, что я пытаюсь добавить аргумент в корневой синтаксический анализатор, который имеет nargs='+'
. Когда я это делаю, он проглатывает все аргументы для -i
, думая, что команда является аргументом, а не идентификатором.
Есть ли способ обойти это? Похоже, что ему придется просматривать аргументы -i
в поисках командного слова, а затем сообщать argparse
, что с этого момента следует возобновить синтаксический анализ.
nargs='+'
обычно плохо ладит с другими. Либо используйте один аргумент несколько раз (-i id1 -i id2 cmd1
), либо определите параметр, чтобы принимать один анализируемый аргумент (-i id1,id2 cmd1
). 19.01.2017argparse
.optparse
может делать что-то вроде того, что вы хотите. Ноargparse
работает исключительно из строк позиции и флага. Он не «упреждает», чтобы увидеть, соответствует ли следующая строка некоторым критериям значения. Сначала он выделяет строки для действия, а затем запускает тестыtype
иchoices
, а не наоборот. 19.01.2017