Beispiel #1
0
    def __init__(self, on_update=None):
        '''
        Constructor
        
        @param  on_update:()→void  Called when a new line is available
        '''
        def noop():
            pass

        self.on_update = noop if on_update is None else on_update
        (self.master, self.slave) = os.openpty()
        self.__reader = LineReader(self.master)
        self.__condition = threading.Condition()
        self.__queue = []

        def background():
            try:
                while True:
                    got = self.__reader.next()
                    if got is None:
                        return
                    self.__condition.acquire()
                    try:
                        self.__queue.append(got)
                    finally:
                        self.__condition.release()
                    self.on_update()
            except:
                return

        self.__thread = threading.Thread(target=background)
        self.__thread.setDaemon(True)
        self.__thread.start()
Beispiel #2
0
 def start(self):
     with LineReader(spawn(*command)) as reader:
         reader.next()
         while True:
             line = reader.next()
             self.semaphore.acquire()
             try:
                 line = line.replace('=', ' ').split(' ')
                 icmp_seq = int(line[line.index('icmp_seq') + 1])
                 ping_time = float(line[line.index('time') + 1])
                 ping_time *= Ping.UNITS[line[line.index('time') + 2]]
                 dropped_pkgs = icmp_seq - self.last_icmp_seq - 1
                 dropped_pkgs = [None] * dropped_pkgs
                 self.last_icmp_seq = icmp_seq
                 self.latency_buffer[:] = ([ping_time] + dropped_pkgs + self.latency_buffer)[:buffer_size]
                 self.last_read = time.monotonic()
             except:
                 pass
             finally:
                 self.semaphore.release()
Beispiel #3
0
 def start():
     with LineReader(spawn(*command)) as reader:
         while True:
             callback(reader.next())