shell 如何在SCons操作中转义环境变量?

gojuced7  于 2023-10-23  发布在  Shell
关注(0)|答案(1)|浏览(147)

我有一个运行Python脚本的build命令。因为python命令有时是python,有时是python3(取决于操作系统),所以我使用保存在环境变量中的完整路径。
但是,这个路径有时会有一些奇怪的字符,比如空格,需要进行转义。例如Windows中的.../Program Files/...
SCons在命令中替换变量时似乎不会自动转义变量。当我运行这个脚本时:

import sys
env = Environment()
env.Replace(PYTHON_EXECUTABLE=sys.executable)
foo = env.Alias('foo', [], '$PYTHON_EXECUTABLE my-script.py')
env.AlwaysBuild(foo)

我得到:

scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
C:\Program Files\Python311\python.exe my-script.py
'C:\Program' is not recognized as an internal or external command,
operable program or batch file.
scons: *** [foo] Error 1
scons: building terminated because of errors.

我不想把路径放在双引号中,因为它们仍然允许在Linux上扩展某些字符。另一方面,Windows不支持单引号。
有没有简单的可移植的方法来转义命令的一部分,不管有什么字符?

fv2wmkja

fv2wmkja1#

SCons提供了一个escape函数,看起来正好可以满足您的需要。
它是在环境变量ESCAPE中预定义的,可以在操作字符串中这样调用:${ESCAPE(YOUR_VARIABLE)}
脚本的固定版本

import sys
env = Environment()
env.Replace(PYTHON_EXECUTABLE=sys.executable)
foo = env.Alias('foo', [], '${ESCAPE(PYTHON_EXECUTABLE)} my-script.py')
env.AlwaysBuild(foo)

相关问题