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

如何在Click单命令程序中使用windows_expand_args阻止Glob展开

解决Click 8.x Windows下Glob表达式自动展开的问题

在Windows环境用Click 8.x开发单命令程序时,传入*.py这类Glob表达式,Click会自动把它展开成匹配的所有py文件,导致设置了nargs=1的参数报错——因为程序只接受1个参数,却收到了多个文件名。之前Click 7.x没这问题,Bash里能用引号绕开Shell展开,但Windows Shell本身不做展开,Click的自动处理反而搞出了错误。

解决办法

直接给@click.command()装饰器加上windows_expand_args=False参数,禁用Click在Windows下的参数自动展开,这样filepattern就能拿到字面的*.py字符串了。

修改后的代码:

import click

@click.command("mycommand", windows_expand_args=False)
@click.argument("filepattern", nargs=1, type=str)
def mycommand(filepattern):
    print(filepattern)


if __name__ == "__main__":
    mycommand()

测试效果

执行python mycommand.py *.py,程序会直接输出:

*.py

不会再弹出参数过多的错误,完全符合需求。

补充说明

Click 8.x开始在Windows上默认开启了参数展开(模拟Shell的glob行为),而windows_expand_args=False可以关掉这个特性。这个参数不只在click.group里能用,click.command同样支持,单命令程序直接在命令装饰器上设置就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 07:53:25