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

