Формально нет. Аргумент подкоманды является обязательным позиционным аргументом, где «выбор» - это имена подпараметров (и их псевдонимы).
Это видно в справочном сообщении, были указаны как {cmd1,cmd}
.
usage: ipython3 [-h] {cmd1,cmd2} ...
positional arguments:
{cmd1,cmd2}
optional arguments:
-h, --help show this help message and exit
Последний Python имеет «ошибку», что на самом деле позволяет ему быть необязательным. Другими словами, это не вызывает ошибки, если вы не даете никаких позиций. Это ошибка, потому что она меняет предыдущее поведение, а большинство людей - то, что нужно. Но даже если это необязательно, и cmd1
определяется как значение по умолчанию, он не будет запускать парсер cmd1
по оставшимся аргументам. И любой аргумент «positional» будет считаться неправильной командной строкой.
Я думаю, что лучшее, что вы можете сделать, это определить один или несколько позиционеров. Возможно, у вас есть выбор и значение по умолчанию, и будет необязательным (nargs = '?'). Остальное (или другое) может иметь nargs='+'
. Играя с этими параметрами, вы можете приблизиться к желаемому поведению, но он не будет использовать механизм подпараметров.
Другой способ думать о проблеме, чтобы рассмотреть вход как
prog one two
Если это интерпретировать, что в prog src dest
или prog cmd id
. Единственным основанием для его высказывания должно быть то, что one
не является одним из copy
или resume
. Но это не так уж умно, когда дело касается «выбора». Он присваивает значение, основанное на позиции, и затем проверяет, соответствует ли он критериям, таким как «выбор» или «тип» (т. Е. Целое число, строка float v).
Хотя это не совсем то, на что я надеюсь, но я думаю, что он так же хорош, как и он. Спасибо, что нашли время, чтобы объяснить. – Oliver