2009-11-30 5 views
1

Mon entreprise passe de la fabrication à la commercialisation. Une partie de notre processus make consiste à appeler xmllint sur un certain nombre de fichiers xml pour les valider par rapport à un schéma.Utilisation de scons pour effectuer la validation

J'ai ce qui suit dans mon SConstruct:

import os; 
Env = DefaultEnvironment() 
pwd = Dir('.').path 
xmlValidator = Builder(action = 'xmllint --noout --schema '+pwd+'/path/schema.xsd '+pwd+'file.xml') 
Env.Append(BUILDERS = {'ValidateXML' : xmlValidator}) 
Env.ValidateXML() 

Quand je lance:

scons -Q 

je reçois:

scons: `.' is up to date. 

Mais aucune validation est exécutée.

Qu'est-ce que je fais mal? Je suis complètement nouveau à Scons, et modérément familier avec Python.

Répondre

2

Vous devez fournir des instructions avec un fichier d'entrée. Vous avez actuellement le fichier source codé en dur dans la "recette" du constructeur. Il est préférable d'utiliser l'espace réservé SOURCE dans la chaîne d'action, puis spécifiez le fichier d'entrée lorsque vous appelez le générateur. Ceci va toujours exécuter la validation, donc vous voudrez peut-être faire sortir le résultat dans un fichier. Pour ce faire, vous devez utiliser l'espace réservé TARGET, par exemple:

xmlValidator = Builder(action='xmllint --schema '+ 
         pwd+'/path/schema.xsd $SOURCE --output $TARGET') 
Env.ValidateXML(source='file.xml', target="out.txt") 
+0

Merci beaucoup. Cela a fonctionné parfaitement sauf que le commutateur --noout doit être supprimé lors de l'utilisation du commutateur --output dans le second exemple. –

+0

OK, bon à savoir. J'ai édité l'exemple, donc c'est logique, juste au cas où. – richq