docs: def main(args=None):
      """
      Run management command handled from command line.
      """
      # Base command line parser. Help is not allowed because command
      # line is parsed in two stages - in the first stage is found setting
      # module of the application, in the second stage are found management
      # command's arguments.
      parser = ArgumentParser(add_help=False)
      parser.add_argument(
          '-s', '--settings',
          dest='settings', action='store', type=str, default=None,
          help=_('application settings module')
      )
  
      # Get settings module
      try:
          settings = get_app_settings(parser, args)
      except ImportError as exc:
          parser.error(_("Invalid application settings module: {}").format(exc))
  
      # Get management commands and add their arguments into command
      # line parser
      commands = get_management_commands(settings)
      subparsers = parser.add_subparsers(
          dest='action', help=_('specify action')
      )
      for command_cls in six.itervalues(commands):
          subparser = subparsers.add_parser(
              command_cls.name, help=command_cls.help)
          for command_args, kwargs in command_cls.arguments:
              subparser.add_argument(*command_args, **kwargs)
  
      # Get config class and add its arguments into command line parser
      if settings:
          config_cls = get_config_class(settings)
          if not issubclass(config_cls, Config):
              raise TypeError(
                  "Config class must be subclass of the "
                  "shelter.core.config.Config")
          for config_args, kwargs in config_cls.arguments:
              parser.add_argument(*config_args, **kwargs)
      else:
          config_cls = Config
  
      # Add help argument and parse command line
      parser.add_argument(
          '-h', '--help', action='help',
          help=_('show this help message and exit')
      )
      cmdline_args = parser.parse_args(args)
      if not cmdline_args.action:
          parser.error(_('No action'))
  
      # Run management command
      command_cls = commands[cmdline_args.action]
      if command_cls.settings_required and not settings:
          parser.error(_(
              "Settings module is not defined. You must either set "
              "'SHELTER_SETTINGS_MODULE' environment variable or "
              "'-s/--settings' command line argument."
          ))
      try:
          config = config_cls(settings, cmdline_args)
      except ImproperlyConfiguredError as exc:
          parser.error(str(exc))
      command = command_cls(config)
      try:
          command()
      except Exception:
          traceback.print_exc(file=sys.stderr)
          sys.stderr.flush()
          if multiprocessing.active_children():
              # If main process has children processes, exit immediately without
              # cleaning. It is a workaround, because parent process waits for
              # non-daemon children.
              os._exit(1)
          sys.exit(1)
      sys.exit(0)