2010-05-18 6 views
1

J'essaie d'utiliser python pour traduire un ensemble de modèles en un ensemble de fichiers de configuration basés sur des valeurs tirées d'un fichier de configuration principal. Cependant, j'ai certains problèmes. Considérez l'exemple suivant d'un fichier de modèle.évaluation de fichiers modèles en python

file1.cfg.template

%(CLIENT1)s %(HOST1)s %(PORT1)d C %(COMPID1)s 
%(CLIENT2)s %(HOST2)s %(PORT2)d C %(COMPID2)s 

Ce fichier contient une entrée pour chaque client. Il y a des centaines de fichiers de configuration comme celui-ci et je ne veux pas avoir de logique pour chaque type de fichier de configuration. Python devrait faire les remplacements et générer des fichiers de configuration automatiquement étant donné un ensemble de valeurs globales lues à partir d'un fichier de configuration xml principal. Toutefois, dans l'exemple ci-dessus, si CLIENT2 n'existe pas, comment supprimer cette ligne? Je pense que Python générerait le fichier de configuration en utilisant quelque chose comme ceci:

os.open("file1.cfg.template").read() % myhash 

où myhash est hachage des paramètres de configuration à partir du fichier de configuration principal qui ne peut contenir CLIENT2 du tout. Dans le cas où il ne contient pas CLIENT2, je veux que cette ligne disparaisse du fichier. Est-il possible d'insérer un bloc 'IF' dans le fichier et python l'évalue-t-il?

Merci pour votre aide. Toutes les suggestions sont les bienvenues.

+0

Si quelqu'un pouvait donner un exemple en python ou un framework tiers comment atteindre ce comportement exact, ce serait fantastique. – user236215

Répondre

3

On dirait que vous avez peut-être dépassé votre simple solution de création de modèles. Peut-être que vous devriez passer à quelque chose comme Jinja? Il peut être moins pénible de simplement implémenter une solution tierce que de créer/continuer à maintenir votre propre solution.

Autres options:

+0

J'ai trouvé que les gens avaient beaucoup de bonnes choses à dire sur Jinja à partir du lien de ma propre réponse. Le recommandez-vous personnellement par rapport à un autre langage de modèle? Merci de nous avoir donné un pourboire. –

0

Peut-être que vous pouvez utiliser un modèle autonome Django.

How do I use Django templates without the rest of Django? - Stack Overflow

+0

pouvez-vous donner un exemple comment puis-je obtenir le comportement ci-dessus avec Django? c'est avoir le code du template dans le fichier, le lire, l'évaluer, avec des blocs IF pour ignorer la deuxième ligne. – user236215

+0

Vous trouverez un exemple au chapitre 4: Le système de gabarit Django http://www.djangobook.com/fr/beta/chapter04/. Vérifiez la balise {% if%}. –

0

Étant donné que les fichiers existent déjà, je définir des valeurs par défaut pour des choses comme CLIENT2 (en supposant que vous savez à l'avance toutes les clés possibles). Vous pouvez probablement définir la valeur par défaut à quelque chose d'inhabituel pour que vous puissiez faire

config = os.open("file1.cfg.template").read() % myhash 
config = [l for l in config.split('\n') if <l does not have unusual text>].join('\n') 

Je suis d'accord avec d'autres qui, à long terme un modèle plus robuste serait mieux.

+0

Y at-il un moyen de définir par défaut des variables de modèle dans une chaîne si elles n'apparaissent pas dans myhash. Sinon, la configuration par défaut va très dur. – user236215

+0

J'ai trouvé une solution. J'évaluerai chaque ligne séparément avec la gestion des exceptions. Merci. – user236215

Questions connexes