# -*- coding: utf-8 -*- u"""盯着自动布线跑完:每 45 s 采一次,进度到 100% 或连续 8 次没变化就退出。""" import io, json, os, sys, time HERE = os.path.dirname(os.path.abspath(__file__)) sys.path.insert(0, HERE) from eda import run JS = u""" const v=(await eda.pcb_PrimitiveVia.getAll()).length; const l=(await eda.pcb_PrimitiveLine.getAll()).length; const t=(document.body.innerText||'').split('\n').map(s=>s.trim()).filter(s=>/^自动布线中/.test(s)); return {v,l,p:t[0]||''}; """ log = io.open(os.path.join(HERE, '_route_watch.log'), 'w', encoding='utf-8') last, same = None, 0 for i in range(400): r = run(JS, timeout=60) if not r.get('success'): log.write(u'%d ERR %s\n' % (i, json.dumps(r, ensure_ascii=False)[:200])); log.flush() time.sleep(45); continue d = r['result'] line = u'%s v=%d l=%d %s' % (time.strftime('%H:%M:%S'), d['v'], d['l'], d['p']) log.write(line + u'\n'); log.flush() key = (d['v'], d['l'], d['p']) same = same + 1 if key == last else 0 last = key if '(100%)' in d['p'] or (not d['p'] and i > 2) or same >= 8: log.write(u'DONE reason=%s\n' % ('100%' if '(100%)' in d['p'] else ('no-progress-text' if not d['p'] else 'stable'))) log.flush(); break time.sleep(45) log.close() print('watch finished')