Форум сайта python.su
про лопату это шутка :) (смеяться после слова лопата)
Офлайн
Офлайн
А что если в PyPy покопаться?!
P.S. Sapphire, хорошая идея кстати. Думал недавно о том, что подобного на питоне нет. Удачи!
Офлайн
Прочитав про PyPy, а потом про CPython, я в итоге набрёл вот на такую страницу документации:
http://docs.python.org/extending/embedding.html
“This can be used for many purposes; one example would be to allow users to tailor the application to their needs by writing some scripts in Python.” - кажется, именно для этого мне и нужен embedded python :)
Только как ограничивать возможности выполняемого скрипта для этих целей, я в этой документации так и не нашёл.
igor.kaist, спасибо :)
Офлайн
А никак :)
Хотели сделать уже раз пять, есть реализация Питона с restricted execution. Почти работает, только глючит. И иногда позволяет “пробить” свою песочницу.
Гвидо в последний раз писал на эту тему весной: http://neopythonic.blogspot.com/2009/03/capabilities-for-python.html
Резюмируя - embedding создан не для того. Но можно аккуратно перебрать сам интерпретатор, оставив только “безопасные” части. Работа не на полчаса.
Офлайн
Прочитал пост гвидо)
Спасибо, Андрей :)
Кажется, разумнее мне будет подыскать просто другой скриптовый язык, для которого проще создавать песочницу. (наконец, узнал, как это называется!)) )
Офлайн
SapphireНе надо другой, для других языков подобные забавы уже есть. Для питона нет.
Кажется, разумнее мне будет подыскать просто другой скриптовый язык, для которого проще создавать песочницу.
Офлайн
Ну для питона они тоже ведь есть) В Google Apps, например (гвидо писал про них). Только больно сильно заморочиться надо, чтобы это организовать.
PS: интересно, как реализована питоновая песочница на codepad.org ?
Офлайн
Перед выполнением передавать код классу ast, в самом классе переопределить visit_Import и visit_Call таким образом, чтобы райзить исключение при совпадении со списком “запрещенной литературы”.
Метод потенциально дырявый, но он позволяет подгружать API, и при этом запрещать отдельные аспекты кода. Сами API при этом будут ничем не ограничены, отже возможны дыры.
З.Ы. Лично я бы сделал так, как советует sypper-pit - плодил бы максимально порезанные паравиртуализаторы для каждой песочницы (например есть еще xen), и спокойно спал бы по ночам.
Офлайн
Немного не в тему, но полностью готовый пример на эту тему (на с++, в качестве скриптового языка идёт с#) есть в sdk для 10 directX. Называется “Scripting”. Там есть все необходимые ограничения.
Офлайн