在开发我的一个应用程序期间,我想给用户一个更强大的过滤器。因此,我想为用户提供一个简单的脚本界面。脚本语言将是 Python。
出于显而易见的原因,我想收紧语言的范围以匹配我的特定目的(我不希望用户触摸服务器的 HDD 文件等)。我也不想自己编写一个 Python 解释器(这将重新发明轮子,而“新”轮子最终将是矩形的)。但是,我还没有找到任何合适的库或模块用于此目的。
Groovy 的编译定制器和编译器配置方法正是我想要的,Python 是否存在类似的东西?
在开发我的一个应用程序期间,我想给用户一个更强大的过滤器。因此,我想为用户提供一个简单的脚本界面。脚本语言将是 Python。
出于显而易见的原因,我想收紧语言的范围以匹配我的特定目的(我不希望用户触摸服务器的 HDD 文件等)。我也不想自己编写一个 Python 解释器(这将重新发明轮子,而“新”轮子最终将是矩形的)。但是,我还没有找到任何合适的库或模块用于此目的。
Groovy 的编译定制器和编译器配置方法正是我想要的,Python 是否存在类似的东西?
您要查找的内容称为“沙盒”或“受限执行”。这个 wiki 页面讨论了一些细节。
简而言之,Python 极客和专家曾多次努力在 Python 之上构建沙箱,但最终都失败了。
主要原因是 Python 提供了太多路径来做某事,以至于沙箱要么必须禁止常见用例(使大量库和 Python 代码无用),要么必须在沙箱中有漏洞,这会使概念没用。
因此,虽然它看起来是一个简单的好主意,但到目前为止,还没有解决方案。AFAIK,Python 中没有钩子可以调整字节码编译器以实现类似Groovy Sandbox的功能。
有关的: