好吧,我有点想通了。CCTray 通过轮询来跟踪构建状态XmlServerReport.aspx
,这是(惊喜!)XML。
所以我目前的解决方案是这样的:
import sys, urllib, xml.sax, xml.sax.handler
report_url = 'http://.../CCNET/XmlServerReport.aspx'
class FoundBuildStatus(Exception):
def __init__(self, status):
self.build_status = status
class Handler(xml.sax.handler.ContentHandler):
def startElement(self, name, attrs):
if name == 'Project' and attrs.get('name') == '...':
status = attrs.get('lastBuildStatus')
if status:
raise FoundBuildStatus(status)
page = urllib.urlopen(report_url)
try:
xml.sax.parse(page, Handler())
except FoundBuildStatus, ex:
if ex.build_status == 'Failure':
# build is not good, do something
...
在我的环境中,它比最初的基于 HTML 的解决方案快大约 8 倍。