def METHOD_NAME(self, timeout=None):
    with self.communications_lock:
        if hasattr(self, 'timeout') and timeout is None:
            timeout = self.timeout
        elif timeout is None:
            timeout = 10
        eol = str.encode(self.termination_character)
        leneol = len(eol)
        line = bytearray()
        start = time.time()
        while time.time() - start < timeout:
            c = self.ser.read(1)
            if c:
                line += c
                if line[-leneol:] == eol:
                    break
            else:
                break
        return line.decode().replace(self.termination_read, '\n')