53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
# coding=utf-8
|
|
|
|
from app.cores.logger import DispatcherLogger
|
|
from app.cores.variable import Variable
|
|
|
|
import sys
|
|
from flask import session
|
|
|
|
|
|
class Script:
|
|
|
|
def __init__(self, tool, project_id=None, dispatcher_logger=None):
|
|
"""
|
|
初始化脚本工具对象
|
|
:param tool: 工具
|
|
:type tool: Tool
|
|
:param project_id: 工具所在项目id
|
|
:type project_id: int
|
|
:param dispatcher_logger: 日志
|
|
:type dispatcher_logger: DispatcherLogger
|
|
"""
|
|
self.script_tool = tool.specific_tool
|
|
if project_id is None:
|
|
self.project_id = session.get('project_id')
|
|
else:
|
|
self.project_id = project_id
|
|
if dispatcher_logger is None:
|
|
self.dispatcher_logger = DispatcherLogger(use_memory_string_handler=True, use_queue_handler=False)
|
|
else:
|
|
self.dispatcher_logger = dispatcher_logger
|
|
|
|
def exec_tool(self):
|
|
error_msg = ''
|
|
self.dispatcher_logger.logger.info('[脚本][执行]')
|
|
if self.project_id is None:
|
|
self.dispatcher_logger.logger.warn('[脚本]获取项目编号project_id为None, 不再执行该脚本')
|
|
else:
|
|
vars = Variable.get_project_variable(project_id=self.project_id)
|
|
glb = {}
|
|
loc = {}
|
|
glb['vars'] = vars
|
|
glb['log'] = self.dispatcher_logger.logger
|
|
try:
|
|
exec(self.script_tool.script_, glb, loc)
|
|
except Exception as e:
|
|
tb = sys.exc_info()[-1]
|
|
while tb.tb_next:
|
|
tb = tb.tb_next
|
|
error_msg = '\n脚本执行异常, 行号: %s, 错误信息: %s' % (tb.tb_lineno, e.args[0])
|
|
log_text = self.dispatcher_logger.get_string_buffer()
|
|
log_text += error_msg
|
|
return log_text
|