首页 > 解决方案 > 如何在 python 中创建点击子命令?

问题描述

查看命令和组的文档后,我没有发现任何有助于使用 click 创建子命令(版本 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-3.xclick

解决方案


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

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() 

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


推荐阅读