如何让 SCons 替换已安装文本文件中的文本

发布于 2024-10-17 07:58:43 字数 129 浏览 7 评论 0原文

我希望能够在从 scons 安装一些 python 脚本时替换模板变量('$(SOFTWARE_VERSION)')。 scons已经有这样的功能了吗?如果没有,那么挂钩 scons 安装过程的最佳方法是什么,以便我可以在安装过程中执行此操作?

I'd like to be able to replace a template variable ('$(SOFTWARE_VERSION)') while installing some python scripts from scons. Does scons already have such functionality? If not, what's the best way to hook into the scons install process so I can do this during install?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

心是晴朗的。 2024-10-24 07:58:43

您可以使用 Substfile 方法。这需要一个输入文件并生成一个输出文件来替换标记的变量。因此,如果您有 script.py.in:

#!/usr/bin/python
print "$SOFTWARE_VERSION"

那么您可以使用以下 SConsctruct 文件生成输出:

env = Environment(tools=['textfile'])
script_dict = {'\$SOFTWARE_VERSION': '1.0'}
env.Substfile('script.py.in', SUBST_DICT = script_dict)

您需要转义字符串 ' 中的 $ \$SOFTWARE_VERSION' 否则 SCons 将其解释为内部环境变量。结果将是一个包含以下内容的文件 script.py

#!/usr/bin/python
print "1.0"

然后,您可以使用 env.Install 安装生成的替换文件。

You could use the Substfile method. This takes a input file and produces an output file substituting marked variables. So if you have script.py.in:

#!/usr/bin/python
print "$SOFTWARE_VERSION"

Then you can use the following SConsctruct file to generate an output:

env = Environment(tools=['textfile'])
script_dict = {'\$SOFTWARE_VERSION': '1.0'}
env.Substfile('script.py.in', SUBST_DICT = script_dict)

You need to escape the $ in the string '\$SOFTWARE_VERSION' otherwise SCons interprets it as an internal environment variable. The result would be a file script.py with this contents:

#!/usr/bin/python
print "1.0"

You can then install this resulting substituted file using env.Install.

彻夜缠绵 2024-10-24 07:58:43

您可以定义一个构建器,它将模板文件作为输入并生成替换的数据作为输出。最灵活的方法是使用 Python 函数作为构建器的 Action。这样您就可以使用 Python 丰富的正则表达式支持来执行替换。至于变量及其值,您可以利用函数的“env”参数中的构造变量。如果所有变量恰好都是构造变量,您可以使用 env.subst() 为您进行搜索和替换。

或者,如果这是一次性的,您可以简单地使用一个命令来执行“sed”或类似程序并为您完成所有工作。

You can can define a Builder that takes the template file as an input and produces the substituted data as output. The most flexible way is to use a Python function as the Action of your builder. This way you can use Python's rich regular expression support to perform the substitution. As for the variables and their values, you could tap into the construction variables from the "env" argument to the function. If all the variables happen to be construction variables, you can use env.subst() to do the search and replace for you.

Alternatively, if this is a one-off, you can simply use a Command that shells out to "sed" or similar program and do all the work for you.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文