Необязательные параметры для аргументов вместе с подкомандами, использующими 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

Другие вопросы по тегам