我想让我的程序有一个参数,它有一些必需的参数和一些可选的参数。像这样的:
[--print text [color [size]]
所以你可以通过以下任何一项:
mycommand --print hello
mycommand --print hello blue
mycommand --print hello red 12
可能有多个这样的参数,所以它必须是一个add_参数。例如:
[--print text [color]] [--output filename [overwrite]]
我可以得到接近我想要的论点:
>>> parser = argparse.ArgumentParser()
>>> act = parser.add_argument('--foo', nargs=3, metavar=('x','y','z'))
>>> act = parser.add_argument('--bar', nargs='?')
>>> act = parser.add_argument('--baz', nargs='*')
>>> parser.print_help()
usage: [-h] [--foo x y z] [--bar [BAR]] [--baz [BAZ [BAZ ...]]]
optional arguments:
-h, --help show this help message and exit
--foo x y z
--bar [BAR]
--baz [BAZ [BAZ ...]]
但不完全是。对argparse有什么办法吗?我知道我可以让它们都成为nargs="*"
,但是--help不会列出可选参数的名称。如果传递nargs="*"
和metavar的元组,argparse将引发异常。
怎么样
然后你会得到这样的东西:
根据Devin Jeanpierre的回答,似乎使用“+”(一个或多个)而不是“*”可以实现您想要实现的目标。 (附言:如果我有足够的观点,我会在他的回答中发表评论)
阅读source code(从
take_action
开始),我相信你想要的是不可能的。所有参数解析和传递给操作都是基于nargs完成的,nargs可以是一个数字,OPTIONAL
(“?”),ZERO_OR_MORE
(“*”),ONE_OR_MORE
(“+”),PARSER
,或REMAINDER
。这必须在Action对象(处理输入的对象)看到它得到什么之前确定,所以它不能动态地计算出nargs
。我想你需要一个变通的办法。我可能有
--foo-x x
,--foo-y y
,和--foo-z z
,也许还有--foo x y z
。相关问题 更多 >
编程相关推荐