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
相关产品推荐
相关产品推荐

