class Popen4(Popen3): """Popen object that joins the stdout and stderr streams into a single output stream.""" childerr = None def __init__(self, cmd, bufsize=-1): Popen3.__init__(self, cmd, 1, bufsize) self.closed = Vector() # use a vector for synchronization close() self.fromchild = self._join(self._fromchild, self._childerr, bufsize) def _join(self, stdout, stderr, bufsize): """create a stream that joins two output streams""" self._pipeOut = PipedOutputStream() joinedStream = PipedInputStream(self._pipeOut) self._outReader = _makeReaderThread(stdout, self._pipeOut.write, bufsize, "%s-stdout" % self.process, self._close) self._errReader = _makeReaderThread(stderr, self._pipeOut.write, bufsize, "%s-stderr" % self.process, self._close) return PyFile(joinedStream) def _close(self): """Must be closed twice (once for each of the two joined pipes)""" self.closed.add(None) if self.closed.size() > 1: self._pipeOut.close()
class output_file(Thread): def __init__(self,pi): self.pout = POS(pi) self.file_name = FileReader(SC(System.in).nextLine()) def run(self): file_sc = SC(self.file_name) while file_sc.hasNext(): self.pout.write(file_sc.nextLine()+"\n")
def reset(self): self.close() self._fed = PipedOutputStream() self._feeder = BufferedInputStream(PipedInputStream(self._fed)) self._fed.write('<?xml version="1.0" encoding="%s"?>' % self._encoding) ipf = XMLInputFactory.newInstance() ipf.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, True) self._sr = ipf.createXMLStreamReader(self._feeder) self._er = ipf.createXMLEventReader(self._sr)
def _join(self, stdout, stderr, bufsize): """create a stream that joins two output streams""" self._pipeOut = PipedOutputStream() joinedStream = PipedInputStream(self._pipeOut) self._outReader = _makeReaderThread(stdout, self._pipeOut.write, bufsize, "%s-stdout" % self.process, self._close) self._errReader = _makeReaderThread(stderr, self._pipeOut.write, bufsize, "%s-stderr" % self.process, self._close) return PyFile(joinedStream)
def __init__(self, encoding=ENCODING): self._depth = 0 self._buffer = '' self.handler = IncrementalHandler() self._encoding = encoding self._fed = PipedOutputStream() self._feeder = BufferedInputStream(PipedInputStream(self._fed)) self._fed.write('<?xml version="1.0" encoding="%s"?>' % encoding) ipf = XMLInputFactory.newInstance() ipf.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, True) self._sr = ipf.createXMLStreamReader(self._feeder) self._er = ipf.createXMLEventReader(self._sr)
class Popen4(Popen3): """Popen object that joins the stdout and stderr streams into a single output stream.""" childerr = None def __init__(self, cmd, bufsize=-1): Popen3.__init__( self, cmd, 1, bufsize ) self.closed = Vector() # use a vector for synchronization close() self.fromchild = self._join( self._fromchild, self._childerr, bufsize ) def _join( self, stdout, stderr, bufsize ): """create a stream that joins two output streams""" self._pipeOut = PipedOutputStream() joinedStream = PipedInputStream( self._pipeOut ) self._outReader = _makeReaderThread( stdout, self._pipeOut.write, bufsize, "%s-stdout" % self.process, self._close ) self._errReader = _makeReaderThread( stderr, self._pipeOut.write, bufsize, "%s-stderr" % self.process, self._close ) return FileUtil.wrap(joinedStream) def _close( self ): """Must be closed twice (once for each of the two joined pipes)""" self.closed.add( None ) if self.closed.size() > 1: self._pipeOut.close()
def _join( self, stdout, stderr, bufsize ): """create a stream that joins two output streams""" self._pipeOut = PipedOutputStream() joinedStream = PipedInputStream( self._pipeOut ) self._outReader = _makeReaderThread( stdout, self._pipeOut.write, bufsize, "%s-stdout" % self.process, self._close ) self._errReader = _makeReaderThread( stderr, self._pipeOut.write, bufsize, "%s-stderr" % self.process, self._close ) return FileUtil.wrap(joinedStream)
class IncrementalParser(object): def __init__(self, encoding=ENCODING): self._depth = 0 self._buffer = '' self.handler = IncrementalHandler() self._encoding = encoding self._fed = PipedOutputStream() self._feeder = BufferedInputStream(PipedInputStream(self._fed)) self._fed.write('<?xml version="1.0" encoding="%s"?>' % encoding) ipf = XMLInputFactory.newInstance() ipf.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, True) self._sr = ipf.createXMLStreamReader(self._feeder) self._er = ipf.createXMLEventReader(self._sr) def close(self): self._initialized = False self.handler.reset() self._depth = 0 self._buffer = '' self._fed.close() self._feeder.close() self._er.close() self._sr.close() def reset(self): self.close() self._fed = PipedOutputStream() self._feeder = BufferedInputStream(PipedInputStream(self._fed)) self._fed.write('<?xml version="1.0" encoding="%s"?>' % self._encoding) ipf = XMLInputFactory.newInstance() ipf.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, True) self._sr = ipf.createXMLStreamReader(self._feeder) self._er = ipf.createXMLEventReader(self._sr) def _parse(self, chunk, fragment=False): if chunk.startswith('<?xml '): chunk = chunk[chunk.find('?>')+2:] if not chunk: return self._fed.write(chunk) er = self._er consumed = False while er.hasNext(): if not fragment and self._feeder.available() == 0 and consumed: break event = er.next() etype = event.getEventType() if etype == XMLEvent.START_ELEMENT: consumed = False if not chunk.endswith('/>'): consumed = True self._depth += 1 element = event.asStartElement() self.handler.startElementNS(None, element.getName(), element.getAttributes()) elif etype == XMLEvent.END_ELEMENT: consumed = True self._depth -= 1 element = event.asEndElement() self.handler.endElementNS(None, element.getName()) if self._depth == 0: break elif etype == XMLEvent.CHARACTERS: consumed = False self.handler.characters(event.asCharacters().getData()) elif etype == XMLEvent.COMMENT: consumed = True self.handler.comment(event.getText()) elif etype == XMLEvent.PROCESSING_INSTRUCTION: consumed = True self.handler.processingInstruction(event.getTarget(), event.getData()) elif etype == XMLEvent.START_DOCUMENT: self.handler.startDocument() elif etype == XMLEvent.END_DOCUMENT: break def feed(self, chunk): if not chunk: return self._buffer = self._buffer + chunk pos = posa = 0 posb = -1 last_posb = 0 new_buffer = '' buf_len = len(self._buffer) while 1: found = False posa = self._buffer.find('<', pos) if posa > -1: posb = self._buffer.find('>', posa) if posb > -1: found = True pos = posb self._parse(self._buffer[last_posb:posb+1]) last_posb = posb+1 if not found and posb != buf_len: break self._buffer = self._buffer[last_posb:]
def __init__(self,pi): self.pout = POS(pi) self.file_name = FileReader(SC(System.in).nextLine())
class IncrementalParser(object): def __init__(self, encoding=ENCODING): self._depth = 0 self._buffer = '' self.handler = IncrementalHandler() self._encoding = encoding self._fed = PipedOutputStream() self._feeder = BufferedInputStream(PipedInputStream(self._fed)) self._fed.write('<?xml version="1.0" encoding="%s"?>' % encoding) ipf = XMLInputFactory.newInstance() ipf.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, True) self._sr = ipf.createXMLStreamReader(self._feeder) self._er = ipf.createXMLEventReader(self._sr) def close(self): self._initialized = False self.handler.reset() self._depth = 0 self._buffer = '' self._fed.close() self._feeder.close() self._er.close() self._sr.close() def reset(self): self.close() self._fed = PipedOutputStream() self._feeder = BufferedInputStream(PipedInputStream(self._fed)) self._fed.write('<?xml version="1.0" encoding="%s"?>' % self._encoding) ipf = XMLInputFactory.newInstance() ipf.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, True) self._sr = ipf.createXMLStreamReader(self._feeder) self._er = ipf.createXMLEventReader(self._sr) def _parse(self, chunk, fragment=False): if chunk.startswith('<?xml '): chunk = chunk[chunk.find('?>') + 2:] if not chunk: return self._fed.write(chunk) er = self._er consumed = False while er.hasNext(): if not fragment and self._feeder.available() == 0 and consumed: break event = er.next() etype = event.getEventType() if etype == XMLEvent.START_ELEMENT: consumed = False if not chunk.endswith('/>'): consumed = True self._depth += 1 element = event.asStartElement() self.handler.startElementNS(None, element.getName(), element.getAttributes()) elif etype == XMLEvent.END_ELEMENT: consumed = True self._depth -= 1 element = event.asEndElement() self.handler.endElementNS(None, element.getName()) if self._depth == 0: break elif etype == XMLEvent.CHARACTERS: consumed = False self.handler.characters(event.asCharacters().getData()) elif etype == XMLEvent.COMMENT: consumed = True self.handler.comment(event.getText()) elif etype == XMLEvent.PROCESSING_INSTRUCTION: consumed = True self.handler.processingInstruction(event.getTarget(), event.getData()) elif etype == XMLEvent.START_DOCUMENT: self.handler.startDocument() elif etype == XMLEvent.END_DOCUMENT: break def feed(self, chunk): if not chunk: return self._buffer = self._buffer + chunk pos = posa = 0 posb = -1 last_posb = 0 new_buffer = '' buf_len = len(self._buffer) while 1: found = False posa = self._buffer.find('<', pos) if posa > -1: posb = self._buffer.find('>', posa) if posb > -1: found = True pos = posb self._parse(self._buffer[last_posb:posb + 1]) last_posb = posb + 1 if not found and posb != buf_len: break self._buffer = self._buffer[last_posb:]