17

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

4

4 回答 4

10

一种选择可能是使用 PyPy 创建沙盒 python。这将限制某人可以进行的外部操作。

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

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

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

总的来说,不是小事。你需要一些强大的开发技能才能轻松地做到这一点。如果您只是在学习,您可能会发现这项任务有点令人生畏。

于 2012-06-29T16:12:46.853 回答
6

在这里要做的事情比你想象的要多。

主要问题是您不能让人们在您的网络服务器上运行任意 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=吗?

于 2012-06-29T15:54:00.347 回答
5

最近的一个选项是使用repl

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

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

我强烈建议您查看他们的网站http://repl.it

于 2015-02-24T11:24:17.250 回答
1

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

于 2015-06-04T16:22:10.003 回答