如何在网站上嵌入Python解释器

时间:2012-06-29 15:46:16

标签: python web-applications interpreter

我正在尝试建立一个类似于Codecademy的教育编码网站,但我坦率地说应该采取什么步骤。我是否可以指出在webapp中包含一个简单的python解释器的正确方向?

4 个答案:

答案 0 :(得分:10)

一个选项可能是使用PyPy创建沙盒python。它会限制某人可以做的外部操作。

完成设置之后,您的网站将获取代码源,通过ajax将其发送到您的Web服务器,服务器将在沙盒python实例的子进程中运行代码。如果耗时超过5秒,您也可以终止该过程。然后返回输出作为对客户端的响应。

有关PyPy沙箱的帮助,请参阅以下链接:
http://doc.pypy.org/en/latest/sandbox.html
http://readevalprint.com/blog/python-sandbox-with-pypy.html

创建一个完全交互式的REPL将更加复杂。您需要为服务器上的每个客户端保留一个解释器。然后接受输入的ajax“行”并通过与正在运行的进程通信来运行它们,并返回输出。

总的来说,不是微不足道的。你需要一些强大的开发技能来舒服地做到这一点。如果你刚刚学习,你可能会发现这项任务有点令人生畏。

答案 1 :(得分:5)

这里还有比你想象的还要多的事情。

主要问题是无法让人们在您的网络服务器上运行任意Python代码。例如,如果他们这样做会发生什么

import os
os.system("rm -rf *.*")

很明显,你必须安全地运行这个Python代码。但然后你有保护Python的问题,这基本上是不可能的,因为它是多么动态。因此,您可能不得不在虚拟机中运行Python shell,这会带来自己的麻烦。


你见过例如吗? http://code.google.com/p/google-app-engine-samples/downloads/detail?name=shell_20091112.tar.gz&can=2&q=

答案 2 :(得分:2)

最近的一个选择是使用repl

此选项非常棒,因为编译器是使用JavaScript 制作的,因此编译执行是在用户端进行的,意味着服务器没有漏洞。

他们有以下编译器: Python3,Python,Javascript,Java,Ruby,PHP ......

我强烈建议您在http://repl.it

查看他们的网站

答案 3 :(得分:1)

了解LXC容器。他们有一个非常酷的api,你可以用来创建轻量级的Linux容器。您可以在该容器内运行子进程命令,这样最终用户就不会弄乱您的主服务器。