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

如何阻止Click框架对命令行参数中的环境变量进行自动展开?

如何阻止Click框架对命令行参数中的环境变量进行自动展开?

我完全懂你的痛点——明明用单引号把参数括起来,让shell别去解析环境变量了,结果Click还是自作主张把$M0这类变量给展开了,确实挺闹心的。

先回顾下你的代码场景:

import click

@click.command()
@click.argument('message')
def main(message: str):
    click.echo(message)

if __name__ == '__main__':
    main()

执行时你用了单引号包裹参数,结果还是被Click展开了:

➜  Desktop python foo.py '$M0/.viola/2025-01-25-17-20-23-307878'
M:/home/ramrachum/.viola/2025-01-25-17-20-23-307878

解决这个问题其实很简单,Click默认开启了环境变量展开的功能,我们只需要在定义命令时禁用它就行。只需要给@click.command()添加一个context_settings参数,把expand_envvars设为False:

修改后的代码如下:

import click

@click.command(context_settings={"expand_envvars": False})
@click.argument('message')
def main(message: str):
    click.echo(message)

if __name__ == '__main__':
    main()

现在再执行同样的命令,Click就会原封不动地输出你传入的参数了:

➜  Desktop python foo.py '$M0/.viola/2025-01-25-17-20-23-307878'
$M0/.viola/2025-01-25-17-20-23-307878

简单解释下:expand_envvars这个配置项控制Click是否自动解析参数中的环境变量占位符,默认值是True,改成False后,它就会完全保留参数的原始字符串,不再做任何展开处理。

备注:内容来源于stack exchange,提问作者Ram Rachum

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 15:04:37