'Internal method used to invoke the requested action on each plugin
in the output plugin list.
A caller to any of the METHODS can specify that the call he\'s doing
should NOT go to a specific plugin set specified in the ignore_plugins
keyword argument.'

def _call_output_plugins_action(self, action_name, *args, **kwds):

    encoded_params = []
    for arg in args:
        if isinstance(arg, unicode):
            arg = arg.encode(UTF8, 'replace')
        encoded_params.append(arg)
    args = tuple(encoded_params)
    ignored_plugins = kwds.pop('ignore_plugins', set())
    for o_plugin in self._output_plugin_instances:
        if (o_plugin.get_name() in ignored_plugins):
            continue
        try:
            opl_func_ptr = getattr(o_plugin, action_name)
            apply(opl_func_ptr, args, kwds)
        except Exception as e:
            if (self._w3af_core is None):
                return
            from w3af.core.controllers.core_helpers.status import w3af_core_status
            class fake_status(w3af_core_status, ):
                pass
            status = fake_status(self._w3af_core)
            status.set_current_fuzzable_request('output', 'n/a')
            status.set_running_plugin('output', o_plugin.get_name(), log=False)
            exec_info = sys.exc_info()
            enabled_plugins = 'n/a'
            self._w3af_core.exception_handler.handle(status, e, exec_info, enabled_plugins)
