【问题标题】:Optional parameters to arguments along with sub commands using argparse参数的可选参数以及使用 argparse 的子命令
【发布时间】:2014-08-21 00:45:31
【问题描述】:

我在尝试允许将可选测试参数插入到我创建的 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。有什么办法可以两者兼得吗?

【问题讨论】:

  • 可选?以及它应该如何判断下一个单词是可选参数还是下一个参数?你的语法模棱两可。

标签: python arguments argparse optional subcommand


【解决方案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

【讨论】:

    猜你喜欢
    • 2019-03-26
    • 2020-05-04
    • 2017-11-28
    • 2011-02-08
    • 2018-08-11
    • 2013-07-10
    • 2019-07-12
    • 1970-01-01
    相关资源
    最近更新 更多