gpt4 book ai didi

Python argparse 可选子参数

转载 作者:太空狗 更新时间:2023-10-29 18:24:45 25 4
gpt4 key购买 nike

我想为我的程序提供一个参数,其中包含一些必需参数和一些可选参数。像这样:

[--print text [color [size]]

所以你可以传递其中任何一个:

mycommand --print hello
mycommand --print hello blue
mycommand --print hello red 12

可能有多个这样的,所以它必须是一个单独的 add_argument。例如:

[--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 会抛出异常。

最佳答案

怎么样

def printText(args):
print args

parser = argparse.ArgumentParser()
subparser = parser.add_subparsers()
printer = subparser.add_parser('print')
printer.add_argument('text')
printer.add_argument('color', nargs='?')
printer.add_argument('size', type=int, nargs='?')
printer.set_defaults(func=printText)

cmd = parser.parse_args()
cmd.func(cmd)

然后你会得到这样的东西:

$ ./test.py -h
usage: test.py [-h] {print} ...

positional arguments:
{print}

$ ./test.py print -h
usage: test.py print [-h] text [color] [size]

positional arguments:
text
color
size

$ ./test.py print text
Namespace(color=None, func=<function printText at 0x2a96150b90>, size=None, text='text')

$ ./test.py print text red
Namespace(color='red', func=<function printText at 0x2a96150b90>, size=None, text='text')

$ ./test.py print text red 12
Namespace(color='red', func=<function printText at 0x2a96150b90>, size=12, text='text')

关于Python argparse 可选子参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5257403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com