Web服务中的代码解释器

4 投票
3 回答
1323 浏览
提问于 2025-04-16 16:09

我想建立一个网站,这个网站里有一个可以安全运行代码的环境(可以是在用户的电脑上,也可以是在服务器上),它可以接收一些短小的代码块(比如Python、Java、C、C++等常见语言),然后执行这些代码。

我想做的是一个地方,用户在这里可以输入他们对某个编程问题的解决方案,然后我们可以用一些测试案例来运行这个代码,看看它是否正确,或者找出它在哪些情况下会出错。

我在寻找一些库、现有的实现或者一些大致的想法。如果有人能提供帮助,我会非常感激。

3 个回答

1

看看这篇文章 《一个吸引人的编程环境》,里面讨论了如何创建这样一个环境。

2

对于Python,你可以在沙盒模式下编译PyPy,这样你就能得到一个完整的解释器和标准库,但不能随便执行系统命令。你还可以限制执行脚本的运行时间和内存使用量。

这里有一些代码,是我之前写的,可以在pypy-sandbox这个程序里执行包含Python脚本的字符串,并返回输出结果。你可以从普通的CPython中调用这段代码。

2

有很多比赛网站做的事情和这个类似,比如 TopCoder 和 Timus Online Judge 就是两个例子。不过,它们在技术方面的信息不多。

codepad.org 是最接近你想做的那种网站。它们在经过严格保护的 EC2 服务器上运行程序,这些服务器会定期清空,以防止被利用。

Codepad 至少部分是基于 geordi,这是一个设计用来运行任意 C++ 程序的 IRC 机器人。它使用 Haskell,并且拦截系统调用,以防止有害活动。

稍微不那么重要的是,Google App Engine 的一个示例项目是一个 Python shell。它依赖 GAE 的服务器端沙箱来防止恶意活动。


在界面方面,最简单的方式可以参考国际信息学奥林匹克竞赛。让人们在目标语言中写一个特定名称的函数,然后从你的测试框架中调用这个函数。如果需要,可以提供一些简单的函数,让他们从框架中请求信息。

撰写回答