示例#1
0
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()
示例#2
0
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")
示例#3
0
    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)
示例#4
0
 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)
示例#5
0
    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)
示例#6
0
 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)
示例#7
0
文件: popen2.py 项目: jbalint/spark
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()
示例#8
0
    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)
示例#9
0
文件: popen2.py 项目: jbalint/spark
 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)
示例#10
0
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:]
示例#11
0
	def __init__(self,pi):
		self.pout = POS(pi)
		self.file_name = FileReader(SC(System.in).nextLine())
示例#12
0
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:]