Python click库参数解析异常:单个单词参数被拆分为单字母问题求助
问题核心原因
你遇到的参数被拆分为单个字母的根本原因是命名冲突导致错误调用了被click装饰过的命令函数。
被@cli.command装饰后的store函数已经不是普通Python函数,它被click封装了命令行参数解析逻辑,直接调用它时会把传入的第一个字符串当作命令行输入做拆分,所以传入test会被拆为t/e/s/t四个独立参数,触发参数缺失报错。
你当前的代码中,命令处理函数和实际业务存储函数重名都为store,代码最后一行的调用实际上触发了被click包装的命令函数,而非你预期的业务逻辑函数。
解决方法
- 给业务存储函数改名,避免和命令处理函数重名,修改后代码示例:
import click # 实际业务存储逻辑改名,避免和命令函数重名 def store_key(application, key, expiration='1/1/9999', userdata='{}'): # 此处写你原本的存储业务逻辑 pass @click.group() def cli(): pass @cli.command(no_args_is_help=True) @click.argument('application') @click.argument('key') @click.argument('expiration', required=False, default='1/1/9999') @click.argument('userdata', required=False, default='{}') def store(application, key, expiration, userdata): '''Stores APPLICATION, KEY, and optionally EXPIRATION, and USERDATA in a new key. Creates a keychain if one does not already exist.''' # 调用改名后的业务函数,不要调用被click装饰的store本身 store_key(application,key,expiration,userdata) if __name__ == '__main__': cli()
- 额外检查包入口配置:你贴的错误输出中Usage提示的命令名是
e而非api-keychain,如果是本地调试直接跑脚本,确保入口调用了cli();如果是用setuptools打包,确认entry_point配置指向正确的cli对象,示例pyproject.toml配置:
[project.scripts] api-keychain = "你的模块名:cli"
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

