首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用scons执行验证

使用scons执行验证
EN

Stack Overflow用户
提问于 2009-12-01 03:58:58
回答 2查看 223关注 0票数 2

我的公司正在从制造转向scons。make过程的一部分是对许多xml文件调用xmllint,以根据模式对它们进行验证。

我的SConstruct中有以下内容:

代码语言:javascript
复制
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()

当我运行时:

代码语言:javascript
复制
scons -Q

我得到了:

代码语言:javascript
复制
scons: `.' is up to date.

但是没有运行任何验证。

我做错了什么?

我对scons完全陌生,对Python也比较熟悉。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-01 16:46:52

您需要为scons提供一个输入文件。您当前已将源文件硬编码到构建器“配方”中。最好在操作字符串中使用源占位符,然后在调用构建器时指定输入文件。

代码语言:javascript
复制
xmlValidator = Builder(action='xmllint --noout --schema '+
                               pwd+'/path/schema.xsd $SOURCE')
Env.Append(BUILDERS = {'ValidateXML' : xmlValidator})
Env.ValidateXML(source='file.xml')

这将始终运行验证,因此您可能希望让它将结果输出到文件中。为此,您可以使用目标占位符,例如:

代码语言:javascript
复制
xmlValidator = Builder(action='xmllint --schema '+
                       pwd+'/path/schema.xsd $SOURCE --output $TARGET')
Env.ValidateXML(source='file.xml', target="out.txt")
票数 3
EN

Stack Overflow用户

发布于 2020-09-19 21:11:00

假设您还将XML文件用作其他构建器的输入。通过使用具有多个操作的构建器,您可以在该阶段执行验证。如下所示:

代码语言:javascript
复制
xslt = Builder(action=['xmllint --noout --schema /path/to/schema.xsd $SOURCE',
                       'xsltproc --output $TARGET /path/to/style.xsl $SOURCE'])
Env.Append(BUILDERS = {'XSLT' : xslt})

使用此解决方案,不需要创建任何不必要的文件。如果生成了XML文件,您可以类似地创建一个构建器,该构建器既生成文件又执行验证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1822055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档