我有一个正在尝试改进的CLI。我想做的是有一个带有3个选择的可选参数,并且根据您的选择,您需要为该选择输入某些参数。
例如:
devise
等
所以这看起来像是:
--create dog DOG_NAME DOG_BREED
OR
--create cat CAT_NAME
OR
--create fish FISH_BREED FISH_TANK
但是对于每个选择,我如何有不同的必需参数?我必须使用子解析器吗?
编辑:使用了略有不同的架构并使其正常工作。
parser.add_argument("--create", help="Create an animal", choices=["dog", "cat", "fish"])
答案 0 :(得分:2)
子解析器似乎可以做到这一点,但您也可以尝试使用click。在我的系统上工作的示例:
#!/usr/bin/env python3
import click
@click.group('parent')
def parent():
pass
@parent.group('create')
def create():
pass
@create.command()
@click.argument('name')
@click.argument('breed')
def dog(name, breed):
print(f'Dog: {name}: {breed}')
@create.command()
@click.argument('name')
def cat(name):
print(f'Cat: {name}')
@create.command()
@click.argument('breed')
@click.argument('tank')
def fish(breed, tank):
print(f'Fish of {breed} in {tank}')
if __name__ == '__main__':
parent()
运行时:
$ ./click_test.py --help
Usage: click_test.py [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
create
和
$ ./click_test.py create --help
Usage: click_test.py create [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
cat
dog
fish
然后再往下走
$ ./click_test.py create dog
Usage: click_test.py create dog [OPTIONS] NAME BREED
Try "click_test.py create dog --help" for help.
Error: Missing argument "NAME".
$ ./click_test.py create dog Fido Labrador
Dog: Fido: Labrador
以前,我实际上并不对单击感兴趣,我认为对于某些我想要的复杂情况而言,这太过局限了-但对于这种情况,这确实非常好。
答案 1 :(得分:0)
尝试传递包含引号的多个参数列表,例如:
--create dog "DOG_NAME DOG_BREED"
您也可以用逗号分隔参数,例如
--create dog DOG_NAME,DOG_BREED
使用split()
获取参数列表。