如何在ant-exec中读取和处理stdout值?

时间:2018-10-16 11:31:25

标签: java eclipse build ant

使用可执行文件验证文件。 我的蚂蚁脚本目标为:

<target name="xtest" depends="xyz" description="Additional check">
    <exec executable="${xtest.exe}" failonerror="true" resultproperty="retVal">
        <arg value="${inputfile.dat}" />
    </exec>
    <echo>Returned: ${retVal}</echo>
</target>

控制台上的输出:

xtest:
     [exec] Errors:          3
     [exec] Warnings:        1
     [exec] Infos:           0
     [exec] Total:           4
     [echo] Returned: 0

可执行文件的退出代码(${retVal})是0,即使它检测到错误也是如此。 如果错误超过0,我想终止该过程。

在上面的示例中,如何读取第一条输出线([exec] Errors: 3)并解析值为3并终止该过程?

2 个答案:

答案 0 :(得分:0)

使用resultproperty可以将可执行文件的输出重定向到文件。 然后,由于输出匹配属性文件格式,因此您可以读取该输出文件并在其中使用属性,如:

<target name="xtest" depends="xyz" description="Additional check">
    <exec executable="${xtest.exe}" failonerror="true" resultproperty="retVal" output="output.txt">
        <arg value="${inputfile.dat}" />
    </exec>
    <echo>Returned: ${retVal}</echo>
    <property file="output.txt" prefix="xtestoutput"/>
    <fail>
        <condition>
            <not>
                <equals arg1="${xtestoutput.Errors}" arg2="0" />
            </not>
        </condition>
    </fail>
</target>

答案 1 :(得分:0)

与下面的代码完全兼容。谢谢!

<target name="xtest" depends="xyz" description="Additional check">
    <exec executable="${xtest.exe}" failonerror="true" resultproperty="retVal" output="output.txt">
        <arg value="${inputfile.dat}" />
    </exec>
    <echo>Returned: ${retVal}</echo>
    <property file="output.txt" prefix="xtestoutput"/>
    <fail>
        <condition>
          <not>
            <equals arg1="${xtestoutput.Errors}" arg2="0" />
          </not>
        </condition>
    </fail>
</target>