0

我在尝试允许将可选测试参数插入到我创建的 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 更改为什么,它都会开始禁止原来的,即 --test。有没有办法让我两者兼得?

4

1 回答 1

1

你可以有一个可选的 nargs,使用nargs='?',但正如 Karoly Horvath 所说,你的语法是模棱两可的。将 --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

于 2014-06-30T15:38:59.540 回答