Как встроить интерпретатор Python на сайте

Я пытаюсь создать образовательный сайт кодирования, похожий на Codecademy, но я, честно говоря, не знаю, какие шаги следует предпринять. Могу ли я указать в правильном направлении, включая даже простой интерпретатор python в веб-приложении?

4 ответов


одним из вариантов может быть использование PyPy для создания изолированного python. Это ограничило бы внешние операции, которые кто-то мог бы сделать.

Как только вы это настроите, ваш сайт возьмет источник кода, отправит его через ajax на ваш веб-сервер, и сервер запустит код в подпроцессе изолированного экземпляра python. Вы также сможете убить процесс, если это займет больше времени, чем, скажем, 5 секунд. Затем вы вернуться обратно в качестве ответа клиенту.

посмотреть эти ссылки для справки по PyPy sandbox:
http://doc.pypy.org/en/latest/sandbox.html
http://readevalprint.com/blog/python-sandbox-with-pypy.html

создать полностью интерактивные REPL будет еще сложнее. Вам нужно будет сохранить интерпретатор для каждого клиента на вашем сервере. Затем примите ajax "линии" ввода и запустите их через interp, связавшись с запущенным процессом, и верните вывод.

в целом, не тривиально. Вам понадобятся некоторые сильные навыки dev, чтобы сделать это комфортно. Вы можете найти эту задачу немного сложной, если вы только учитесь.


здесь больше, чем вы думаете.

главная проблема в том, что вы не может пусть люди запускают произвольный код Python на вашем веб-сервере. Например, что произойдет, если они это сделают

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

так ясно, что вы должны безопасно запустить этот код Python. Но!--4-->затем у вас есть проблема обеспечения безопасности Python, что в основном невозможно из-за того, насколько он динамичен. И поэтому вам, вероятно, придется запустить оболочку Python в виртуальной машине, что сопровождается собственными головными болями.


вы видели, например http://code.google.com/p/google-app-engine-samples/downloads/detail?name=shell_20091112.tar.gz&can=2&q=?


одним из последних вариантов для этого является использование repl.

этот параметр является удивительным, потому что составители сделаны с использованием JavaScript так сборник и исполнение в пользователя, что означает, что сервер свободен от уязвимостей.

у них есть компиляторы: Python3, Python, Javascript, Java, Ruby, PHP...

Я настоятельно рекомендую вам проверить их сайт наhttp://repl.it


посмотрите в контейнеры LXC. У них есть довольно крутой api, который вы можете использовать для создания легких контейнеров linux. Вы можете запускать команды подпроцесса внутри этого контейнера таким образом, чтобы конечный пользователь не мог связываться с вашим основным сервером.