def readline_no_block(self):
        """
        Read lines from the buffer but does NOT wait till lines to be completed.
        If no complete line can be read, just return with None.
        This is useful for runtime to process multiple commands from user. The
        generator form also helps the program to keep reading and processing
        user command when a program is running at the same time.
        :return: str:
        """
        ret = []
        while True:
            try:
                ret.append(self._buffer.pop())
                if ret[-1] == '\n':
                    yield ''.join(ret)
                    ret = []
            except IndexError:
                self._buffer.extend(ret)
                break

        Read lines from the buffer but does NOT wait till lines to be completed.
        If no complete line can be read, just return with None.
        This is useful for runtime to process multiple commands from user. The
        generator form also helps the program to keep reading and processing
        user command when a program is running at the same time.
        :return: str:
        
system/shio.py