Необязательные параметры для аргументов вместе с подкомандами, использующими argparse
У меня возникают проблемы при попытке добавить дополнительные параметры теста в CLI, который я создал. Вот что я смог сделать:
python test.py --test build --name foobar
Где build - это подкоманда, а --test позволяет системе указывать на тестовый сервер по умолчанию. Однако я хотел бы позволить пользователям указывать дополнительное, необязательное свойство сервера после --test, чтобы пользователи могли указывать тестовый сервер, где бы они ни хотели. Пример:
python test.py --test "<random http>" build --name foobar
Мой код в настоящее время выглядит так:
main_parser = argparse.ArgumentParser()
main_parser.add_argument('--test', action='store', nargs=1, dest='test_server', help='Use test server')
subparsers = main_parser.add_subparsers(help='SubCommands', dest='command')
build_parser = subparsers.add_parser('build', help = 'lists the build command(s) for the specified view/warehouse')
build_parser.add_argument('--name', action='store', nargs=1, dest='build_name')
Однако, независимо от того, на что я изменяю nargs, он начинает запрещать оригинал, который просто - самый лучший. Есть ли способ, которым я могу иметь оба?
1 ответ
Вы можете иметь необязательные Наргс, используя nargs='?'
Но, как утверждает Кароли Хорват, ваша грамматика неоднозначна. Вам будет гораздо лучше добавить --test к вашему подпапке сборки
main_parser = argparse.ArgumentParser()
subparsers = main_parser.add_subparsers(help='SubCommands', dest='command')
build_parser = subparsers.add_parser('build', help = 'lists the build command(s) for the specified view/warehouse')
build_parser.add_argument('--test', action='store', nargs='?', dest='test_server', help='Use test server')
build_parser.add_argument('--name', action='store', nargs=1, dest='build_name')
Тогда ваш синтаксис будет:
python test.py build --test "<random http>" --name foobar
попробуйте посмотреть на argparse#nargs