常见问题

一般

Windows上的Shell变量扩展

我有一个简单的Click应用程序:

import click

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

if __name__ == '__main__':
    main()

当您在参数中传递环境变量时,它会扩展它:

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

请注意,我在上面使用了单引号,因此我的Shell没有扩展环境变量,而Click则扩展了环境变量。如何让Click不扩展它?

回答

如果您不想单击在Windows上模拟(尽可能)unix扩展,请在调用CLI时传递Windows_expand_args=False。Windows命令行不执行任何 *、~或$ENV扩展。它也不区分双引号和单引号(后者的意思是“不要在这里扩展”)。Click模拟扩展,以便应用程序在两个平台上的行为相似,但不会接收有关使用的引言的信息。