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

如何在Python Click模块中实现命令后可传参的多命令行工具?

实现带全局选项和多命令的Click工具

看起来你已经有了一个不错的开头,不过目前代码里有几个小问题需要调整——比如命令函数无法获取全局的removedigits选项值,还有第三个命令没实现。我帮你完善了代码,同时补上了对应的功能逻辑:

import click

@click.group()
@click.option('--removedigits/--removenodigits', default=False, help="To remove digits or not")
def cli(removedigits):
    # 这里可以添加全局初始化逻辑,如果需要的话
    pass

def process_input(args, remove_digits, transform_func):
    """通用处理函数:统一处理参数的数字移除和格式转换"""
    processed_args = []
    for arg in args:
        if remove_digits:
            # 过滤掉字符串中的数字字符
            cleaned_arg = ''.join([c for c in arg if not c.isdigit()])
            processed_args.append(transform_func(cleaned_arg))
        else:
            processed_args.append(transform_func(arg))
    return processed_args

@cli.command('uppercase')
@click.argument('arguments', nargs=-1)
@click.pass_context
def uppercase_cmd(ctx, arguments):
    """将输入参数转换为大写(支持移除数字)"""
    # 通过上下文获取全局选项的配置值
    result = process_input(arguments, ctx.parent.params['removedigits'], str.upper)
    click.echo(' '.join(result))

@cli.command('lowercase')
@click.argument('arguments', nargs=-1)
@click.pass_context
def lowercase_cmd(ctx, arguments):
    """将输入参数转换为小写(支持移除数字)"""
    result = process_input(arguments, ctx.parent.params['removedigits'], str.lower)
    click.echo(' '.join(result))

@cli.command('capitalize')
@click.argument('arguments', nargs=-1)
@click.pass_context
def capitalize_cmd(ctx, arguments):
    """将输入参数每个单词首字母大写(支持移除数字)"""
    result = process_input(arguments, ctx.parent.params['removedigits'], str.capitalize)
    click.echo(' '.join(result))

if __name__ == '__main__':
    cli()

关键调整说明:

  • 全局选项传递:用@click.pass_context装饰命令函数,通过ctx.parent.params['removedigits']拿到全局选项的配置,让每个命令都能复用这个设置。
  • 代码复用:提取了process_input通用函数,避免三个命令写重复的逻辑,统一处理数字移除和格式转换。
  • 命令可读性:把原来模糊的processor、processor1改成了语义明确的函数名,后续维护更方便。
  • 补全第三个命令:新增了capitalize命令,满足你三个命令的需求。

使用示例:

  1. 转大写并移除数字:
python your_script.py --removedigits uppercase Hello123 World456

输出:HELLO WORLD

  1. 转小写保留数字:
python your_script.py --removenodigits lowercase Hello123 World456

输出:hello123 world456

  1. 首字母大写:
python your_script.py capitalize hello world 789test

输出:Hello World 789Test

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:33:53