我正在将源代码放入数据库中,然后将调用Exec()函数。用户将无法直接访问此代码,但是出于安全性考虑,我只能将功能限制为您真正需要的功能。我使用了这段代码:
exposed_methods = {'rule': rule, 'print': print, 'return': 'return'}
exec([CODE_STRING], {'__builtins__': None}, exposed_methods)
但这太局限了,我似乎无法回到编辑内存中的变量或返回某些内容的过程。这是一个简单的测试:
string = """
if rule.test(True):
variable_test = 'test1.1'
return 'test1.2'
else:
variable_test = 'test2.1'
return 'test2.2'
"""
exposed_methods = {'rule': rule, 'print': print, 'return': 'return'}
exec(string, {'__builtins__': None}, exposed_methods)
回溯(最近通话最近):
文件“”,第1行,位于
文件“”,第3行 语法错误:在外部“返回” 功能
该变量不在内存中,并且该方法未返回找到的