使用Python运行Ant构建时出现的问题:
使用os.system () )调用Ant内部版本时,无论内部版本成功还是失败(BUILD SUCCESSFUL/BUILD FAILED ),命令行始终正常结束。
要解决问题:
可能的第一种方法是获取ant命令的返回值,并根据返回值确定命令行的退出状态。 不是0或0,0表示正常结束。
查阅相关资料时,python调用系统命令的函数为os.system、os.popen、commands.getstatusoutput/get status/get output、subprocessses
os.system ()无法获取返回值和输出
os.popen () )返回file read的对象(这是read ) )操作后可以看到执行的输出。
commands.getstatusoutput ()返回系统命令的结束状态和输出
commands.getstatus ()返回系统命令的结束状态
commands.getoutput ) )使用返回系统命令输出的commands相关函数运行Ant命令行时:
不执行构建而直接退出(退出状态为(1),输出为(不是内部或外部命令,也不是可执行程序或批处理文件) )。
结论:可能是因为Ant命令不是系统命令。 在那里寻找资料,就知道了subprocess的相关函数,如subprocess.call、subprocess.check_call、subprocess.check_output等
subprocess.call(*popenargs,**kwargs )执行命令,等待命令结束,然后返回子进程的返回值
subprocess.check _ call * popen args,**kwargs执行上述call命令并检查返回值。 如果子程序返回非零,则会抛出CalledProcessError异常。 此异常具有returncode属性并被记录
subprocess.check_output ()运行程序并返回使用subprocess.call命令运行Ant命令行时的标准输出。
无论构建成功还是失败,命令行始终正常结束。 返回值为0
结论:命令行退出状态,即返回值指示Ant构建是否成功执行的状态,而与Ant构建状态无关。 命令行的退出状态(即返回值)与Ant内部版本状态无关,因此只能分析命令行的输出结果,并根据内部版本的成功或失败来确定命令行的退出状态。 然后,使用os.popen ()命令获取输出结果并分析返回状态值。
具体的Python脚本DEMO如下。
#! Python.exe
# python version 2.7.8
#-* -编码: utf-8-* -
'调用Ant执行构建并返回构建结果'
__author__='donhui '
import os
build _ successful=' build successful '
BUILD_FAILED='BUILD FAILED '
调用Ant执行构建,并返回构建结果
#
defbuild(ant_target,build_file ) :
ant _ cmd=' ant-f {0} {1} 21 '.format (build _ file,ant_target ) ) )。
logging.info(ant_cmd )。
状态=1
forlineinOS.popen(ant_cmd ) :
打印链接,
if BUILD_SUCCESSFUL in line:
状态=0
返回状态
if __name__=='__main__':
调用Ant执行构建
build_file=os.getcwd (() )/build.xml ) )。
ant_targets='init '
if 0!=build(ant_targets,build_file ) :
exit(1)。