'Push a line to the interpreter.
The line should not have a trailing newline; it may have
internal newlines.  The line is appended to a buffer and the
interpreter\'s runsource() method is called with the
concatenated contents of the buffer as source.  If this
indicates that the command was executed or invalid, the buffer
is reset; otherwise, the command is incomplete, and the buffer
is left as it was after the line was appended.  The return
value is 1 if more input is required, 0 if the line was dealt
with in some way (this is the same as runsource()).
@param line: line of text
@type line: L{bytes}
@return: L{bool} from L{code.InteractiveInterpreter.runsource}'

def push(self, line):

    self.buffer.append(line)
    source = '\n'.join(self.buffer)
    source = source.decode('utf-8')
    more = self.runsource(source, self.filename)
    if (not more):
        self.resetBuffer()
    return more
