Как встроить интерпретатор 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. Вы можете запускать команды подпроцесса внутри этого контейнера таким образом, чтобы конечный пользователь не мог связываться с вашим основным сервером.