@@ -83,7 +83,7 @@ def exec_code(self, code_str, keywords):
8383 return result .get ('data' )
8484 raise Exception (result .get ('msg' ))
8585
86- def generate_mcp_server_code (self , _code ):
86+ def _generate_mcp_server_code (self , _code ):
8787 self .validate_banned_keywords (_code )
8888
8989 # 解析代码,提取导入语句和函数定义
@@ -116,6 +116,31 @@ def generate_mcp_server_code(self, _code):
116116
117117 return "\n " .join (code_parts )
118118
119+ def get_exec_code (self , code_str ):
120+ python_paths = CONFIG .get_sandbox_python_package_paths ().split (',' )
121+ code = self ._generate_mcp_server_code (code_str )
122+ return f"""
123+ try:
124+ import os
125+ import sys
126+ import pickle
127+ path_to_exclude = ['/opt/py3/lib/python3.11/site-packages', '/opt/maxkb-app/apps']
128+ sys.path = [p for p in sys.path if p not in path_to_exclude]
129+ sys.path += { python_paths }
130+ env = dict(os.environ)
131+ for key in list(env.keys()):
132+ if key in os.environ and (key.startswith('MAXKB') or key.startswith('POSTGRES') or key.startswith('PG') or key.startswith('REDIS') or key == 'PATH'):
133+ del os.environ[key]
134+ locals_v={ '{}' }
135+ globals_v=globals()
136+ exec({ dedent (code )!a} , globals_v, locals_v)
137+ f_name, f = locals_v.popitem()
138+ for local in locals_v:
139+ globals_v[local] = locals_v[local]
140+ except Exception as e:
141+ pass
142+ """
143+
119144 def _exec_sandbox (self , _code , _id ):
120145 exec_python_file = f'{ self .sandbox_path } /execute/{ _id } .py'
121146 with open (exec_python_file , 'w' ) as file :
0 commit comments