rendered paste body def select(self, timeout): data = [] while True: fifo_fd = os.open(self.fifoname, os.O_NONBLOCK) readees, writees, errs = select.select([fifo_fd], [], [], timeout) if fifo_fd in readees: fifo = os.fdopen(fifo_fd) while True: try: stuff = fifo.read() if stuff: self.log.debug("Read %d bytes" % len(stuff)) data.append(stuff) else: self.log.debug("Read, but no data") time.sleep(1) break except IOError: self.log.debug("EOF, breaking inner") time.sleep(1) break else: self.log.debug("Nothing pending") try: os.close(fifo_fd) except OSError: self.log.debug("Nonpending failed") break try: os.close(fifo_fd) except OSError: self.log.debug("Continuing failed") return ''.join(data)