You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Click如何实现hello project template list嵌套命令

实现Click三级嵌套命令的方案

Click 实现多层级命令的核心规则:所有需要挂载子命令的中间层级,必须用@click.group()定义为命令组,只有最末端执行业务逻辑的节点,才用@<上级组名>.command()定义为可执行命令。
你当前代码的问题是直接把project定义成了根命令下的末端command,这类节点无法继续挂载子命令,自然无法实现hello project template list的三级调用结构。

正确的层级拆分

要实现目标命令,需要按命令段拆分4层结构:

  • 第一层:根命令组,对应命令前缀hello
  • 第二层:project子命令组,挂载在根命令组下,对应命令第二段project
  • 第三层:template子命令组,挂载在project组下,对应命令第三段template
  • 第四层:list执行命令,挂载在template组下,对应命令最后一段list,JSON读取和打印的逻辑全部放在这个末端函数中即可。

修正后的完整代码

import click
import json

# 根命令组:对应 hello
@click.group()
def cli():
    pass

# 二级命令组:对应 hello project
@cli.group()
def project():
    pass

# 三级命令组:对应 hello project template
@project.group()
def template():
    pass

# 末端执行命令:对应 hello project template list
@template.command(name='list')
def list_templates():
    with open('template.json', 'r', encoding='utf-8') as f:
        data = json.load(f)
        for item in data['project_template']:
            click.echo()
            click.echo(f"Template name: {item['template_name']}")
            click.echo(f"GitHub location: {item['github_location']}")
            click.echo(f"Project Description: {item['project_description']}")
            click.echo()

if __name__ == "__main__":
    cli()

注意事项

  • 不要用原生print()做终端输出,优先使用Click提供的click.echo(),可以自动兼容不同操作系统的终端编码、换行规则,避免出现乱码、输出格式异常的问题。
  • 读取JSON文件时建议显式指定encoding='utf-8',避免Windows系统下默认使用GBK编码打开文件导致解析报错。
  • 定义命令时name参数需要填写实际调用的命令名,你原有代码里写的name='to print something'不符合命令命名规则,会导致实际注册的命令和预期不符。
  • 部署完代码可以先执行hello project template --help查看帮助信息,确认list子命令已经正确挂载后,再执行hello project template list即可触发对应逻辑。

内容的提问来源于stack exchange,提问作者Ayushi Agarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 06:30:50