2014年4月28日 星期一 晴
上周五写了个Python程序,就是解析出svn log的信息,但每次运行的结果都不一样。这是我平生第一次遇到这样的情况,我没有加随机数,访问的内容应该是一样的,怎么会结果不一样?周五快下班的时候才发现的,来不及调试了。今天来公司一步步把所有信息打印出来,看了原因是svn信息每次输出都不一样,随机的。我的正则表达式没能很好地匹配上,所以每次的结果都不一样。
较为详细的回顾一下:
- 执行svn log -r%d:HEAD –xml -v %s’ % (rev,url)这条
–xml的输出,有时候是
<path
kind="file"
action="A">/branches/ZXL/AAP_SMTPH/alps/releaseSvnLabel</path>
</paths>
有时候是
<path
action="M" kind="file">/branches/ZXL/MR_AP_BASE/alps/packages/apps/Mms/src/com/android/mms/transaction/HttpUtils.java</path>
<path
-
我的正则表达式把action带进去了,所以有时候能匹配,有时候不能匹配。
-
解决方法:修改正则表达式,最终的代码片段如下:
changefirestr = r'action="(\w)".*?>(.*?)<\/path>'
changefireobj = re.compile(changefirestr, re.DOTALL)
#省略......
args = ('svn log -r%d:HEAD --xml -v %s' % (rev,url)).split(' ')
proc = subprocess.Popen(args,stdout=subprocess.PIPE)
info = proc.stdout.read()
for loglist in info.split('</logentry>'):
objs = lastverobj.findall(loglist)
if objs:
ver,author,changedate,commitlog = objs[0]
items = changefireobj.findall(loglist)
for item in items:
...