def run(self, module, task, response): """ Processing the task, catching exceptions and logs, return a `ProcessorResult` object """ logger = module.logger result = None exception = None stdout = sys.stdout self.task = task self.response = response try: sys.stdout = ListO(module.log_buffer) if inspect.isgeneratorfunction(self._run): for result in self._run(task, response): self._run_func(self.on_result, result, response, task) else: result = self._run(task, response) self._run_func(self.on_result, result, response, task) except Exception as e: logger.exception(e) exception = e finally: self.task = None self.response = None sys.stdout = stdout follows = self._follows messages = self._messages logs = list(module.log_buffer) extinfo = self._extinfo module.log_buffer[:] = [] return ProcessorResult(result, follows, messages, logs, exception, extinfo)
def run_task(self, module, task, response): """ 处理task,捕捉错误,返回ProcessorResult object Processing the task, catching exceptions and logs, return a `ProcessorResult` object """ # TODO module是啥 self.logger = logger = module.logger result = None exception = None stdout = sys.stdout self.task = task # deep copy response if isinstance(response, dict): response = rebuild_response(response) self.response = response self.save = (task.get('track') or {}).get('save', {}) try: if self.__env__.get('enable_stdout_capture', True): # 一个具有writelines等方法的基于list的obj sys.stdout = ListO(module.log_buffer) self._reset() # 运行task result = self._run_task(task, response) # TODO # on_result 用于处理结果 if inspect.isgenerator(result): for r in result: self._run_func(self.on_result, r, response, task) else: self._run_func(self.on_result, result, response, task) except Exception as e: logger.exception(e) exception = e finally: follows = self._follows messages = self._messages logs = list(module.log_buffer) extinfo = self._extinfo save = self.save sys.stdout = stdout self.task = None self.response = None self.save = None # 清空buffer module.log_buffer[:] = [] return ProcessorResult(result, follows, messages, logs, exception, extinfo, save)
def run_task(self, module, task, response): """ Processing the task, catching exceptions and logs, return a `ProcessorResult` object """ logger = module.logger result = None exception = None stdout = sys.stdout self.task = task if isinstance(response, dict): response = rebuild_response(response) self.response = response self.save = (task.get('track') or {}).get('save', {}) try: if self.__env__.get('enable_stdout_capture', True): sys.stdout = ListO(module.log_buffer) self._reset() #执行脚本 result = self._run_task(task, response) if inspect.isgenerator(result): for r in result: self._run_func(self.on_result, r, response, task) else: #调用on_result self._run_func(self.on_result, result, response, task) except Exception as e: logger.exception(e) exception = e finally: follows = self._follows messages = self._messages logs = list(module.log_buffer) extinfo = self._extinfo save = self.save sys.stdout = stdout self.task = None self.response = None self.save = None module.log_buffer[:] = [] return ProcessorResult(result, follows, messages, logs, exception, extinfo, save)
def run(self, module, task, response): logger = module.logger result = None exception = None stdout = sys.stdout self.task = task self.response = response try: sys.stdout = ListO(module.log_buffer) if inspect.isgeneratorfunction(self._run): for result in self._run(task, response): self._run_func(self.on_result, result, response, task) else: result = self._run(task, response) self._run_func(self.on_result, result, response, task) except Exception, e: logger.exception(e) exception = e