def filterOutput(cmd): """Run a shell cmd, reformatting output as HTML.""" theFilter = SConsGCCFilter(findSConstructDir()) childIn, childOut, childErr = os.popen3(cmd, 0) infd = childIn.fileno() outfd = childOut.fileno() errfd = childErr.fileno() inSet = [outfd, errfd] errSet = [infd, outfd, errfd] while True: ins, outs, errs = select.select(inSet, [], errSet) if errs: print "<b>Error descriptors: <i>%s</i><b>" % repr(errs) for item in errs: errSet.remove(item) if not errSet: break for fd in ins: content = os.read(fd, 65536) if not content: inSet.remove(fd) else: theFilter.feed(content) if ins: write(theFilter.filter()) if not inSet: childIn.close() childOut.close() childErr.close() write(theFilter.filter(consumeAll=True)) break
def filterOutput(args): """Run a shell cmd, reformatting output as HTML.""" theFilter = SConsGCCFilter(findSConstructDir()) p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) outfd = p.stdout.fileno() errfd = p.stderr.fileno() inSet = [outfd, errfd] errSet = [outfd, errfd] while True: ins, outs, errs = select.select(inSet, [], errSet) if errs: print("<b>Error descriptors: <i>%s</i><b>" % repr(errs)) for item in errs: errSet.remove(item) if not errSet: break for fd in ins: content = os.read(fd, 65536) if not content: inSet.remove(fd) else: theFilter.feed(content) if ins: write(theFilter.filter()) if not inSet: p.stdout.close() p.stderr.close() write(theFilter.filter(consumeAll=True)) break