如何在 python 中创建点击子命令?

How to create click subcommands in python?

查看命令和组的 documentation 后,我没有发现任何有助于通过单击创建子命令的信息(版本 7.1.2)。要么我错过了,要么描述的很奇怪。

我想做的是有一个子命令,这样我就可以做,例如

python myscript.py sub1
python myscript.py sub2

执行两个不同的函数。这是我尝试过的:

import click

@click.group()
def sub1():
    print("sub1")

@click.group()
def sub2():
    print("sub2")

我也试过这个:

import click

@click.command()
def sub1():
    print("sub1")

@click.command()
def sub2():
    print("sub2")

这都行不通:

import click

@click.group()
def cli():
    print("cli")
    pass

@cli.command("sub1")
def sub1():
    print("sub1")

@cli.command("sub2")
def sub2():
    print("sub2")

但这似乎不起作用(即永远不会执行打印语句)。怎么做才对?这究竟在哪里记录?

在尝试文档中给出的确切示例时,我也得到了相同的行为:

import click
@click.group()
@click.option('--debug/--no-debug', default=False)
def cli(debug):
    click.echo(f"Debug mode is {'on' if debug else 'off'}")

@cli.command()  # @cli, not @click!
def sync():
    click.echo('Syncing') 

完全没有输出!

通过单击创建子命令,并在您调用您的代码时使其正常工作

python mycode.py 

你需要定义 __main__ 东西:

import click

@click.group()
def cli():
    pass

@cli.command("sub1")
def sub1():
    print("sub1")

@cli.command("sub2")
def sub2():
    print("sub2")

if __name__ == "__main__":
   cli() 

他们似乎忘记了在他们的文档中提到它,或者它隐藏在某个地方。