LINUX.ORG.RU

Подмножество Python для своих сценариев

 ,


0

3

Есть некая программа (+устройство), которым можно и нужно управлять. Причем сценарии работы с устройством могут быть самыми разнообразными.

Сначала я делал свои текстовые программы работы. Затем реализовал функцию загрузки Python-файлов, которые исполняются в программе и выводят в stdout текст в нужном формате.

Хочется сделать следующий шаг и реализовать некое ограниченное подмножество, чтобы нельзя было импортировать левые модули или писать в файлы. А просто чтобы были некие мои предефайненные классы и можно было прописывать некие математические действия алгоритма на этими объектами.

Как можно загнать скрипт на Python в некую песочницу? Ограничить возможности до необходимого минимума. Может даже есть специальные модули для реализации подобной задумки. Использую libpython из программы на C++.

https://docs.python.org/3/library/functions.html#exec

exec(object[, globals[, locals]])

If the globals dictionary does not contain a value for the key __builtins__, a reference to the dictionary of the built-in module builtins is inserted under that key. That way you can control what builtins are available to the executed code by inserting your own __builtins__ dictionary into globals before passing it to exec().

к вопросу об импорте левых модулей:

>>> exec("import os")
>>> exec("import os", {'__builtins__': {}})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
ImportError: __import__ not found
MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)
Ответ на: комментарий от uralbash

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

I-Love-Microsoft ★★★★★
() автор топика

Хочется сделать следующий шаг и реализовать некое ограниченное подмножество,

Это называется Domain specific language (DSL)

pru-mike ★★
()

Вот с твоим ником как раз прелестно обмазываться всякой гадостью вроде пистонов, си-диезов и прочих крестов!

anonymous
()
Ответ на: комментарий от anonymous

Я тоже люблю пистон, он тякой няшногаденький

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.