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

Click:如何将子命令的退出码传递回命令组

Click:如何将子命令的退出码传递回命令组

嘿,这个问题我之前也碰到过!其实Click本身就内置了处理子命令退出码的机制,你原来的代码里有个小问题——主命令组里硬写的sys.exit(0)会把子命令的退出码给覆盖掉,我们调整一下就能解决:

首先,移除主命令组里的手动退出调用,因为Click会自动帮我们处理子命令的执行结果,不需要手动在main函数里强制指定退出码。接下来给你两种可行的实现方式:

方法一:子命令返回退出码

让子命令直接返回你需要的退出码,Click会自动将这个值作为整个程序的退出码:

import click
import sys

@click.group()
def main():
    # 这里不需要写sys.exit(0),Click会自动处理子命令的返回值
    pass

@main.command()
def get():
    exit_code = 1
    # 直接返回退出码,Click会把它作为程序最终的退出码
    return exit_code

方法二:子命令中直接调用sys.exit

如果你的子命令需要在某个逻辑点提前退出,直接用sys.exit()传入退出码即可,整个程序会立即以该码退出,主命令组也会自然接收到这个状态:

import click
import sys

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

@main.command()
def get():
    # 直接调用sys.exit传递退出码,程序会立刻终止并返回该码
    sys.exit(1)

关键说明

你原来的代码中,main函数里的sys.exit(0)是“罪魁祸首”——不管子命令执行成功还是失败,这行代码都会强制程序以0(成功)的状态退出,所以一定要删掉它,让Click的命令组机制来负责传递退出码。

当你运行子命令时,Click会自动把子命令的执行状态(返回值或者sys.exit的参数)作为整个程序的退出码,完全不需要你在主命令组里手动处理。

备注:内容来源于stack exchange,提问作者Hai Vu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 08:29:32