def tail(self, line_prefix=None, callback=None):

        # Set the channel timeout to the maximum integer the server allows,
        # setting this to None breaks the KeyboardInterrupt exception and
        # won't allow us to Ctrl+C out of teh script
        self.channel.settimeout(sys.maxint)

        # Create an empty line buffer and a line counter
        current_line = ''
        line_counter = 0

        # Loop forever, Ctrl+C (KeyboardInterrupt) is used to break the tail
        while True:

            # Read the output one byte at a time so we can detect \n correctly
            buffer = self.channel.recv(1)

            # If we have an empty buffer, then the SSH session has been closed
            if len(buffer) == 0:
                break

            # Strip all ugly \r (Ctrl-M making) characters from the current
            # read
            buffer = buffer.replace('\r', '')

            # Add the currently read buffer to the current line output
            current_line += buffer

            # Display the last read line in realtime when we reach a \n
            # character
            if current_line.endswith('\n'):
                if line_counter and callback:
                    sys.stdout.write(callback(line_prefix, current_line))
                else:
                    if line_counter and line_prefix:
                        sys.stdout.write(line_prefix)
                    if line_counter:
                        sys.stdout.write(current_line)
                sys.stdout.flush()
                line_counter += 1
                current_line = ''
Returns an ErrorDict for the data provided for the form
dataset/ETHPy150Open fgimian/paramiko-expect/paramikoe.py/SSHClientInteraction.tail--crossover with--dataset/ETHPy150Open AppScale/appscale/AppServer/lib/django-1.2/django/forms/forms.py/BaseForm._get_errors