子解析器似乎可以实现此功能,但您也可以尝试使用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
之前,我实际上并不对单击感兴趣,我认为对于某些我想要的复杂情况而言,这太过局限了-但对于这种情况,它实际上是相当不错的。