docs: def run(self, argv):
          """Equivalent to the main program for the application.
  
          :param argv: input arguments and options
          :paramtype argv: list of str
          """
          try:
              index = 0
              command_pos = -1
              help_pos = -1
              help_command_pos = -1
              for arg in argv:
                  if arg == 'bash-completion' and help_command_pos == -1:
                      self._bash_completion()
                      return 0
                  if arg in self.commands[self.api_version]:
                      if command_pos == -1:
                          command_pos = index
                  elif arg in ('-h', '--help'):
                      if help_pos == -1:
                          help_pos = index
                  elif arg == 'help':
                      if help_command_pos == -1:
                          help_command_pos = index
                  index = index + 1
              if command_pos > -1 and help_pos > command_pos:
                  argv = ['help', argv[command_pos]]
              if help_command_pos > -1 and command_pos == -1:
                  argv[help_command_pos] = '--help'
              self.options, remainder = self.parser.parse_known_args(argv)
              self.configure_logging()
              self.interactive_mode = not remainder
              self.initialize_app(remainder)
          except Exception as err:
              if self.options.verbose_level >= self.DEBUG_LEVEL:
                  self.log.exception(err)
                  raise
              else:
                  self.log.error(err)
              return 1
          if self.interactive_mode:
              _argv = [sys.argv[0]]
              sys.argv = _argv
              return self.interact()
          return self.run_subcommand(remainder)