argparse:位置参数默认值无效?

14

我有:

from argparse import ArgumentParser

parser = ArgumentParser(description='Test')
parser.add_argument("command",
                help="the command to be executed",
                choices=["dump", "delete", "update", "set"],
               default="set")
parser.parse_args()

但是当我运行:python test.py时,会得到以下结果:

usage: test.py [-h] {dump,delete,update,set}
test.py: error: too few arguments

也许今天我只是太过迷糊了,但我就是想不出我的输入哪里错了。或者说使用 argparse 简直不可能实现这一点吗?

1个回答

16
为使default关键字参数起作用,您需要像下面这样添加nargs='*':
parser.add_argument("command",
        help="the command to be executed",
        choices=["dump", "delete", "update", "set"],
        nargs='?',
        default="set"
    )

更多信息请参见 https://docs.python.org/2/library/argparse.html#default :)

由 OP 编辑: nargs='*' 允许输入多个命令。因此,将其改为 nargs='?',因为我要求只输入一个命令。


1
我认为在 OP 的情况下最好使用 nargs='?' - Leon
@Squizz 我知道了:在那里放置 "*" 允许使用 test.py dump delete - 所以我得到了一系列的命令...但实际上我只想要 一个。这可能吗? - GhostCat
1
在这种情况下,我会选择 nargs=1,或者只是让它保持为 nargs="*",然后通过执行类似于 args=parser.parse_args() 的操作来解析 parser.parse_args() 的值,然后使用 args.command[0] 检索第一个(或任何一个)参数。这完全取决于您的设计选择! - Squizz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接