python教程—如何在纯Python中使用沙盒Python?-Python实用宝典

python教程—如何在纯Python中使用沙盒Python?

我正在用纯Python开发一个web游戏,并希望使用一些简单的脚本来支持更动态的游戏内容。游戏内容可以由特权用户实时添加。

我正在用纯Python开发一个web游戏,并希望使用一些简单的脚本来支持更动态的游戏内容。游戏内容可以由特权用户实时添加。

如果脚本语言是Python就好了。但是,它不能在访问游戏运行的环境的情况下运行,因为恶意用户可能会造成严重破坏。是否可以在纯Python中运行沙箱Python?

Update:实际上,由于真正的Python支持是多余的,所以使用Python语法的简单脚本语言将是完美的。

如果没有Python脚本解释器,我还能使用其他用纯Python编写的开源脚本解释器吗?需求是对变量、基本条件和函数调用的支持(不是定义)。

回答

这真的很重要。

沙盒Python有两种方法。一是创造一个受限制的环境(即并在此环境中执行代码。这就是Messa的建议。这很好,但是有很多方法可以打破沙箱并制造麻烦。大约一年前,在Python-dev上有一个关于这个的线程,在这个线程中,人们做了很多事情,从捕获异常、探测内部状态到字节码操作。如果你想要一门完整的语言,这是一条路。

另一种方法是解析代码,然后使用ast模块去掉您不想要的构造(例如import语句、函数调用等),然后编译其余的。如果你想使用Python作为配置语言等等,这是一条路。

另一种方法(可能不适合您,因为您正在使用GAE)是PyPy sandbox。虽然我自己没有使用过它,但intertubes网站上的消息是,它是唯一一个真正的 > /em>沙箱Python。

根据您对需求的描述(需求是对变量、基本条件和函数调用的支持,而不是定义),可能想要评估方法2,并从代码中删除所有其他内容。这有点棘手,但却是可行的。

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
1

发表评论