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

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

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

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

См. Эти ссылки для помощи в изолированной программной панели PyPy:
http://doc.pypy.org/en/latest/sandbox.html
http://readevalprint.com/blog/python-sandbox-with-pypy.html

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

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

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

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

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

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