我正在开发一个对来自数据库的(任意)数据进行操作的系统。在系统可以使用数据之前,数据可能需要进行一些预处理。为了允许用户指定可能复杂的规则,我虽然让用户可以输入用于执行此任务的 Python 代码。该系统是纯 Python。
我的计划是将表和列作为变量引入,让用户可以做任何 Python 可以做的事情(包括访问标准库)。现在我的问题:
我如何获取一个字符串(用户输入),将其编译为 Python(在添加代码以提供输入数据之后)并获取输出。我认为最简单的方法是将用户输入的数据用作方法的主体,并将该函数的返回值用作我的新数据。
这可能吗?如果是,如何?用户可能输入恶意代码并不重要,因为可能发生的最糟糕的事情是,他搞砸了自己的系统,谢天谢地,这不是我的问题;)
请您参考如下方法:
Python 提供了一个 exec()应该做你想做的声明。您将希望将您希望作为函数的第二个和/或第三个参数(分别为全局变量和局部变量)的变量传递给函数,因为这些变量控制着 exec 的环境。正在磨合。
例如:
env = {'somevar': 'somevalue'}
exec(code, env)
或者, execfile() 如果您要执行的代码存储在其自己的文件中,则可以以类似的方式使用。
如果你只想执行一个表达式,你也可以使用 eval .
