'Execute the module.
Get arguments list as argument. The arguments are parsed with getopt,
and validated. Then calls setup() and run() of module.
Normally does not need to be overridden.
Args:
argv (list of str): The list of arguments.
Returns:
Object. The result of the module execution.'

def run_argv(self, argv):

    stored_args = self.session[self.name]['stored_args']
    self.args = {}
    try:
        user_args = self.argparser.parse_args(argv)
    except SystemExit:
        raise ArgparseError()
    for (newarg_key, newarg_value) in user_args.__dict__.items():
        default_value = next((action.default for action in self.argparser._actions if (action.dest == newarg_key)), None)
        stored_value = stored_args.get(newarg_key)
        if ((newarg_value != None) and (newarg_value != default_value)):
            self.args[newarg_key] = newarg_value
        elif (stored_value != None):
            self.args[newarg_key] = stored_value
        else:
            self.args[newarg_key] = default_value
    if (self.session[self.name]['status'] == Status.IDLE):
        self.session[self.name]['status'] = self.setup()
        if (self.session[self.name]['status'] != Status.RUN):
            return
    if (self.session[self.name]['status'] == Status.FAIL):
        log.debug((messages.module.module_s_inactive % self.name))
        return
    stored_args = self.session[self.name]['stored_args']
    for (stored_arg_key, stored_arg_value) in stored_args.items():
        if ((stored_arg_key != None) and (stored_arg_value != self.args.get(stored_arg_key))):
            self.args[stored_arg_key] = stored_arg_value
    return self.run()
