#增加自动缩进换行
def indent(elem, level=0):
i= "\n" + level*" "
iflen(elem):if not elem.text or notelem.text.strip():
elem.text= i + " "
if not elem.tail or notelem.tail.strip():
elem.tail=ifor elem inelem:
indent(elem, level+1)if not elem.tail or notelem.tail.strip():
elem.tail=ielse:if level and (not elem.tail or notelem.tail.strip()):
elem.tail=idefparse_dfxp_time_expr(time_expr):if nottime_expr:returntime_expr=time_expr.strip()
mobj= re.match(r'^(?P\d+(?:\.\d+)?)s?$', time_expr)ifmobj:return float(mobj.group('time_offset'))
mobj= re.match(r'^(\d+):(\d\d):(\d\d(?:(?:\.|:)\d+)?)$', time_expr)ifmobj:return 3600 * int(mobj.group(1)) + 60 * int(mobj.group(2)) + float(mobj.group(3).replace(':', '.'))def runProc(proc, out, callback, timeOut = 30):try:
proc_out_closed=False
start=time.time()while notproc_out_closed:if (time.time() - start >timeOut):raiseKeyboardInterrupt()
line= ''
whileTrue:
char= out.read(1)if notchar:
proc_out_closed=Truebreak
if char in [b'\r', b'\n']:break
try:
line+= char.decode('ascii', 'replace')exceptException as ex:continue
if notline:continue
ifisinstance(line, bytes):
line= line.decode('utf-8')#print(line) #print可能會有特殊字符而引起的異常
callback(line)return proc.wait() ==0exceptKeyboardInterrupt:try:if sys.platform != 'win32':
proc.communicate(b'q')else:
proc.terminate()except:print('except...........')returnFalsedef updateInfo(fileName, outputFileName, progress, resultState = 'working', error=None):ifos.path.exists(fileName):
Tree=ET.parse(fileName)
ProgressInfoNode=Tree.getroot()#创建根节点
else:
ProgressInfoNode= ET.Element('ProgressInfo')#创建子节点,并添加属性
GetNode = lambda child: ProgressInfoNode.find(child) if ProgressInfoNode.find(child)!=None elseET.SubElement(ProgressInfoNode, child)
Node= GetNode('OutputFileName')#ET.SubElement(ProgressInfoNode,'OutputFileName')
Node.text =outputFileName
Node= GetNode('ResultState')#ET.SubElement(ProgressInfoNode, 'ResultState')
Node.text =resultState
Node= GetNode('Progress')#ET.SubElement(ProgressInfoNode, 'Progress')
Node.text =str(progress)iferror:
Node= GetNode('error')#ET.SubElement(ProgressInfoNode, 'Progress')
Node.text =str(error)#创建elementtree对象,写文件
indent(ProgressInfoNode,0)
tree=ET.ElementTree(ProgressInfoNode)
tree.write(fileName, encoding="utf-8")