Exemple #1
0
 def timeout_read(self, fd, timeout):
     timer = Timer(timeout)
     try:
         data = fd.recv(10024)
     except Interrupted:
         data = None
     else:
         timer.stop()
     return data
Exemple #2
0
 def timeout_read(self, fd, timeout):
     timer = Timer(timeout)
     try:
         data = fd.recv(10024)
     except Interrupted:
         data = None
     else:
         timer.stop()
     return data
Exemple #3
0
 def timeout_kill(self, accepter, timeout):
     while 1:
         try:
             self.kill_timer = Timer(timeout)
             accepter.accept()
             self.kill_timer.stop()
         except Interrupted:
             self.close()
             return
Exemple #4
0
class Interpreter(object):
    def __init__(self, python, timeout=TIMEOUT, kill_timeout=KILL_TIMEOUT):
        pipe = subprocess.Popen([python, "-u", "-i"],
                                stdout=subprocess.PIPE,
                                stdin=subprocess.PIPE,
                                stderr=subprocess.STDOUT,
                                close_fds=True,
                                bufsize=0)
        self.pipe = pipe
        self.read_fd = FDInput(self.pipe.stdout.fileno(), close=False)
        self.pid = pipe.pid
        self.timeout = timeout
        #self.kill_timeout = kill_timeout
        self.giver, accepter = meetingpoint()
        autogreenlet(self.timeout_kill, accepter, kill_timeout)
        #self.last_activity = time.time()

    def timeout_kill(self, accepter, timeout):
        while 1:
            try:
                self.kill_timer = Timer(timeout)
                accepter.accept()
                self.kill_timer.stop()
            except Interrupted:
                self.close()
                return

    def timeout_read(self, fd, timeout):
        timer = Timer(timeout)
        try:
            data = fd.recv(10024)
        except Interrupted:
            data = None
        else:
            timer.stop()
        return data

    def write_only(self, to_write):
        if to_write is not None:
            self.giver.give(42)
            self.pipe.stdin.write(to_write)

    def interact(self, to_write=None):
        self.write_only(to_write)
        return self.timeout_read(self.read_fd, self.timeout)

    def close(self):
        self.pipe.stdin.close()
        # XXX: some sane way of doing wait here? (note that wait
        #      is blocking, which means it eats all our clean interface)
        self.pipe.wait()

    __del__ = close
Exemple #5
0
class Interpreter(object):
    def __init__(self, python, timeout=TIMEOUT, kill_timeout=KILL_TIMEOUT):
        pipe = subprocess.Popen([python, "-u", "-i"], stdout=subprocess.PIPE,
                            stdin=subprocess.PIPE, stderr=subprocess.STDOUT,
                            close_fds=True, bufsize=0)
        self.pipe = pipe
        self.read_fd = FDInput(self.pipe.stdout.fileno(), close=False)
        self.pid = pipe.pid
        self.timeout = timeout
        #self.kill_timeout = kill_timeout
        self.giver, accepter = meetingpoint()
        autogreenlet(self.timeout_kill, accepter, kill_timeout)
        #self.last_activity = time.time()

    def timeout_kill(self, accepter, timeout):
        while 1:
            try:
                self.kill_timer = Timer(timeout)
                accepter.accept()
                self.kill_timer.stop()
            except Interrupted:
                self.close()
                return

    def timeout_read(self, fd, timeout):
        timer = Timer(timeout)
        try:
            data = fd.recv(10024)
        except Interrupted:
            data = None
        else:
            timer.stop()
        return data

    def write_only(self, to_write):
        if to_write is not None:
            self.giver.give(42)
            self.pipe.stdin.write(to_write)

    def interact(self, to_write=None):
        self.write_only(to_write)
        return self.timeout_read(self.read_fd, self.timeout)

    def close(self):
        self.pipe.stdin.close()
        # XXX: some sane way of doing wait here? (note that wait
        #      is blocking, which means it eats all our clean interface)
        self.pipe.wait()

    __del__ = close
Exemple #6
0
 def timeout_kill(self, accepter, timeout):
     while 1:
         try:
             self.kill_timer = Timer(timeout)
             accepter.accept()
             self.kill_timer.stop()
         except Interrupted:
             self.close()
             return