Есть ли в Python способ запуска кода с параметрами из строковой переменной?

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

Я новичок в Python и Django и не очень понимаю, возможно ли это или нет.

Пример кода:

class CombinationColex:
    def __init__(self, n, k):
        self.total_elements = n 
        self.combination_size = k 
        self.combination_array = [0] * (self.combination_size + 1)
        self.combination_array[self.combination_size] = self.total_elements + 2
        self.first()

    def first(self):
        for i in range(self.combination_size):
            self.combination_array[i] = i

    def next(self):
        if self.combination_array[0] == self.total_elements - self.combination_size:
            self.first()
            return self.combination_size
        j = 0
        while self.combination_array[j + 1] - self.combination_array[j] == 1:
            self.combination_array[j] = j
            j += 1
        self.combination_array[j] += 1
        return j

    def data(self):
        return self.combination_array[:-1]

    def Start(self):
        while True:
            for i in range(self.total_elements):
                present = i in self.data()
                print("1" if present else "0", end="")
            print()
            if self.next() == self.combination_size:
                break
combination_generator = CombinationColex(n, k)
combination_generator.Start()

Да, вы можете реализовать эту функциональность в Python с помощью функции exec(), но вам следует быть осторожными, так как выполнение произвольного кода из базы данных может представлять угрозу безопасности при неправильном подходе.

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

Некоторые идеи можно найти в этом предыдущем вопросе: Как сделать песочницу Python в чистом Python? и здесь: https://softwareengineering.stackexchange.com/questions/191623/best-practices-for-execution-of-untrusted-code

И в официальной вики здесь: https://wiki.python.org/moin/SandboxedPython

Например, PyPy предлагает песочницу напрямую: https://doc.pypy.org/en/latest/sandbox.html

Другая идея заключается в том, чтобы напрямую запускать код, предоставленный в браузере, с помощью CPython, скомпилированного в WebAssembly (пример здесь: https://testdriven.io/blog/python-webassembly/).

Вернуться на верх