У меня есть следующий фрагмент кода, где я использую argparse с несколькими subparsersPython argparse, позиционные аргументы и subparsers
parser = argparse.ArgumentParser(description = "Setup the DB",
add_help=False)
parser.add_argument('action', type = str,
choices=['drop','populate','print','create','print-metadata'],
help = "Specify an action", default = None)
subparsers = parser.add_subparsers()
drop_parser = subparsers.add_parser('drop',parents=[parser])
drop_parser.add_argument('-dataset-name',
required=True,
type = str, help = "Dataset Name",
default = None)
.....
args = parser.parse_args()
.....
Когда я иду, чтобы запустить это я получаю следующее:
python .\populatedb.py drop -dataset-name foo
populatedb.py: error: invalid choice: 'foo' (choose from 'drop', 'populate', 'print', 'create', 'print-metadata')
Я интересно, где код выше идет не так. Обратите внимание, что аргумент «действие» является позиционным аргументом.
Заранее спасибо. Это мое первое использование подпараметров. Я, вероятно, делаю очевидную ошибку.
Заранее спасибо.
С уважением,
Ранга
Почему вы добавляете аргумент для подпараметра? – mgilson
Спасибо за быстрый ответ. Аргумент имеет смысл только для действия «drop». Для других вариантов это не имеет смысла, поэтому я добавил его в подпараметр. Для ясности я оставил других подпараметров. – LostInTheFrequencyDomain
Похоже, вам может понадобиться добавить «падение действия». Вы можете запустить python populatedb.py -h, чтобы увидеть последовательность аргументов, которые вам нужно передать. –