def execute(self):
        try:
            self.op["start_time"] = time.time()
            self.check_dependencies()
            handler_func = self.op["callback"]
            ret = handler_func(self.op["name"], self.args,
                               node=self.op["node"],
                               verbose=self.verbose,
                               quiet=self.quiet,
                               output_dir=self.output_dir,
                               method=self.method,
                               color=self.color,
                               send_output=self.send_output)
            self.log.debug("op %s returns: %r", self.op["name"], ret)
            self.op["result"] = ret
        except (__HOLE__, errors.Error) as error:
            # SystemExit is what argh produces with invalid args
            self.log.error("%s/%s [%s] failed: %s: %s",
                    self.op["node"].name, self.op["config"].name,
                    self.op["name"], error.__class__.__name__, error)
            self.op["result"] = "%s: %s" % (error.__class__.__name__, error)
        except BaseException as error:
            self.log.error("%s/%s [%s] failed: %s: %s",
                    self.op["node"].name, self.op["config"].name,
                    self.op["name"], error.__class__.__name__, error)
            self.op["result"] = "Unhandled error: %s: %s" % (
                error.__class__.__name__, error)
            self.log.exception("task exception")
            raise
        finally:
            self.op["stop_time"] = time.time()
dataset/ETHPy150Open ohmu/poni/poni/tool.py/ControlTask.execute