Как я могу заставить SCons заменить текст в установленных текстовых файлах - PullRequest
5 голосов
/ 16 февраля 2011

Я хотел бы иметь возможность заменить переменную шаблона ('$ (SOFTWARE_VERSION)') при установке некоторых скриптов python из scons. У scons уже есть такая функциональность? Если нет, как лучше подключиться к процессу установки scons, чтобы я мог сделать это во время установки?

Ответы [ 2 ]

6 голосов
/ 11 марта 2011

Вы можете использовать метод 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.

0 голосов
/ 16 февраля 2011

Вы можете определить Builder, который принимает файл шаблона в качестве входных данных и производит замещенные данные в качестве выходных данных. Самый гибкий способ - использовать функцию Python в качестве действия вашего сборщика. Таким образом, вы можете использовать богатую поддержку регулярных выражений Python для выполнения подстановки. Что касается переменных и их значений, вы можете подключиться к строительным переменным из аргумента env функции. Если все переменные являются строительными переменными, вы можете использовать env.subst () для поиска и замены.

В качестве альтернативы, если это однократная операция, вы можете просто использовать команду, которая отправляет «sed» или подобную программу, и выполнять всю работу за вас.

...