varios texto sustituir script reemplazar para masivamente linea especiales completa caracteres archivos templates variables replace install scons

templates - texto - sed reemplazar linea completa



¿Cómo puedo obtener SCons para reemplazar texto en archivos de texto instalados? (2)

Me gustaría poder reemplazar una variable de plantilla (''$ (SOFTWARE_VERSION)'') al instalar algunos scripts de Python desde scons. ¿Los scon ya tienen esa funcionalidad? Si no, ¿cuál es la mejor manera de engancharme al proceso de instalación de scons para poder hacerlo durante la instalación?


Puede definir un generador que toma el archivo de plantilla como una entrada y produce los datos sustituidos como salida. La forma más flexible es usar una función de Python como la Acción de su constructor. De esta forma, puede usar el soporte de expresiones regulares enriquecido de Python para realizar la sustitución. En cuanto a las variables y sus valores, puede acceder a las variables de construcción desde el argumento "env" hasta la función. Si todas las variables son variables de construcción, puede usar env.subst () para realizar la búsqueda y reemplazarla por usted.

Alternativamente, si se trata de una opción única, simplemente puede usar un Comando que se transfiere a "sed" o un programa similar y hace todo el trabajo por usted.


Podría usar el método Substfile . Esto toma un archivo de entrada y produce un archivo de salida sustituyendo variables marcadas. Entonces, si tienes script.py.in :

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

Luego puede usar el siguiente archivo SConsctruct para generar un resultado:

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

Debe escaparse $ en la cadena ''/$SOFTWARE_VERSION'' contrario SCons lo interpreta como una variable de entorno interno. El resultado sería un archivo script.py con este contenido:

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

Luego puede instalar este archivo sustituido resultante usando env.Install .