2008-08-28 14 views
7

Esto es algo que creo que sería muy útil. Básicamente, me gustaría que haya una forma de editar fuente de Python mediante programación sin requerir intervención humana. Hay un par de cosas que me gustaría hacer con esto:Editando mediante programación la fuente de Python

  1. Editar la configuración de aplicaciones Python que utilizan módulos de fuente para la configuración.

  2. Configure una "plantilla" para que pueda personalizar un archivo fuente Python sobre la marcha. De esta forma, puedo configurar un sistema de "proyecto" en una aplicación de código abierto en la que estoy trabajando y permitir que ciertos archivos se personalicen.

probablemente podría escribir algo que puede hacer esto por mí mismo, pero puedo ver que la apertura de una gran cantidad de "diablo está en los detalles" cuestiones de tipo. ¿Hay alguna manera de hacer esto actualmente, o voy a tener que morder la bala y aplicarlo yo mismo?

Respuesta

3

La biblioteca estándar de Python proporciona muy buenas instalaciones para trabajar con Python; tenga en cuenta los módulos tokenize y parser.

+1

Prefiero no tener que ensuciar con el árbol AST si puedo evitarlo, por lo que su respuesta significa que "no hay una manera fácil de hacerlo". –

0

Tuve el mismo problema y simplemente abrí el archivo y lo sustituí un poco: luego volví a cargar el archivo en el intérprete de Python. Esto funciona bien y es fácil de hacer.

De lo contrario, AFAIK tiene que usar algunos objetos conf.

0

La mayoría de estos tipos de cosas se pueden determinar de forma programática en Python, utilizando módulos como sys, os y el identificador especial _file_ que le indica dónde se encuentra en la ruta del sistema de archivos.

Es importante tener en cuenta que cuando se importa por primera vez un módulo ejecutará todo en el alcance del archivo, lo cual es importante para desarrollar comportamientos dependientes del sistema. Por ejemplo, el módulo os básicamente determina qué sistema operativo está utilizando en la importación y luego ajusta su implementación en consecuencia (mediante la importación de otro módulo correspondiente a Linux, OSX, Windows, etc.).

Hay mucha potencia en esta característica y algo en esta línea es probablemente lo que está buscando. :)

[Editar] También he usado socket.gethostname() en algunas instancias raras y hackish. ;)

Cuestiones relacionadas