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

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

 twoxmachine29 июн. 2012 г., 18:15
Большое спасибо, @ChristopheD. Я прочитаю это.
 twoxmachine29 июн. 2012 г., 18:12
О, это будет очень полезно.IPython Notebook site даже предлагает практические рекомендации по запуску публичного сервера ноутбуков!
 twoxmachine29 июн. 2012 г., 18:00
Я не самый опытный в использовании инструментов веб-разработки. Я надеюсь узнать как можно больше из проекта с амбициозной целью!
 ChristopheD29 июн. 2012 г., 18:05
Посмотри на это:doc.pypy.org/en/latest/sandbox.html
 Denis29 июн. 2012 г., 17:54
Вы можете увидеть, как это работает, в блокноте ipython: sudo apt-get install ipython Блокнот ipython

Ответы на вопрос(4)

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

Решение Вопроса

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

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

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

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

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

 twoxmachine29 июн. 2012 г., 18:21
Спасибо за описание шагов, которые я должен предпринять. Я подумал, что такой проект может быть сложным. Я благодарен, что вы нашли время, чтобы показать мне веревки!

Одним из последних вариантов для этого является использованиеРЕПЛ.

Эта опция замечательная, потому что компиляторыare made using JavaScript Итакcompilation а такжеexecution сделано вuser-sideЭто означает, что на сервере нет уязвимостей.

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

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

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

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

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

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

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

 twoxmachine29 июн. 2012 г., 18:08
Проходя некоторые поиски, я знал о некоторых проблемах безопасности, связанных с разрешением произвольного кода. Спасибо, что показали мне реальный пример, он прояснил мне немного! Я перейду к оболочке AJAX, с которой вы связались, чтобы попытаться выяснить, как она реализована. Я ценю, что вы показали это мне.

Ваш ответ на вопрос