code: def do_help(self, *cmd_names: str) -> None:
          
          def _h(cmd: str, template: str) -> None:
              try:
                  func = getattr(self, cmd)
              except AttributeError:
                  self._sout.write('No such command: {}\n'.format(cmd))
              else:
                  doc = func.__doc__ if func.__doc__ else ''
                  doc_firstline = doc.split('\n', maxsplit=1)[0]
                  arg_list = ' '.join(
                      p for p in inspect.signature(func).parameters)
                  self._sout.write(
                      template.format(
                          cmd_name=cmd[len(self._cmd_prefix):],
                          arg_list=arg_list,
                          cmd_arg_sep=' ' if arg_list else '',
                          doc=doc,
                          doc_firstline=doc_firstline
                      ) + '\n'
                  )
  
          if not cmd_names:
              cmds = sorted(
                  c.method_name for c in self._filter_cmds(with_alts=False)
              )
              self._sout.write('Available Commands are:\n\n')
              for cmd in cmds:
                  _h(cmd, self.help_short_template)
          else:
              for cmd in cmd_names:
                  _h(self._cmd_prefix + cmd, self.help_template)
docs: Show help for command name
  
          Any number of command names may be given to help, and the long help
          text for all of them will be shown.