PyMiniRacer добавление классов Python в область JS

#javascript #python #scope

#javascript #питон #область видимости

Вопрос:

Используя PyMiniRacer, я мог бы использовать объекты Python в Javascript; используя библиотеку PyV8:

 import PyV8

class Scope(PyV8.JsClass):
    def __init__(self):
        self.obj1 = Object1()
        self.obj2 = Object2()

pythonScope = Scope()
context     = PyV8.JsContext(pythonScope)
context.enter()
context.eval(...)
 

И используя этот код, javascript может получить доступ к свойствам Scope : obj1 и obj2

Для PyMiniRacer, глядя на код, MiniRacer класс, похоже, не принимает никаких аргументов в конструкторе, поэтому я не вижу, как я мог бы добавить класс области видимости Python в область видимости JS. Существует ли конкретный способ определения класса, чтобы иметь возможность добавлять набор классов python в область JS, или мне нужно ввести их в область JS, используя метод, который я пропустил при просмотре исходного кода?

В Ruby RubyRacer (я понимаю, что RubyRacer и PyMiniRacer — это отдельные проекты разных авторов, хотя PyMiniRacer вдохновлен RubyRacer) объекты в области Ruby могут быть встроены путем вызова context["funcName"] = funcName] , но на Python…

 >>> from py_mini_racer import py_mini_racer
>>> context = py_mini_racer.MiniRacer()
>>> def helloWorld(num):
        return num * 2

>>> context["helloWorld"] = helloWorld
Traceback (most recent call last):
    File "<pyshell#5>", line 1, in <module>
        context["helloWorld"] = helloWorld
TypeError: 'MiniRacer' object does not support item assignment
>>> 
 

…это вызывает ошибку. Я тоже попробовал context.__dict__["helloWorld"] = "helloWorld" , и запуск context.eval(helloWorld(5)) возвращает ReferenceError: helloWorld is not defined ошибку. Все, что он делает, это позволяет мне вызывать context.helloWorld(5) , что не помогает при выполнении из JS.

Как я могу вставить объекты Python в область JS, чтобы в коде JS я мог вызывать и получать доступ к методам и атрибутам из объекта Python?

Ответ №1:

К сожалению, PyMiniRacer не поддерживает привязку объектов или функций Python к контексту JavaScript, поэтому невозможно вызвать код Python из кода JavaScript.

Комментарии:

1. Хорошо, спасибо. Знаете ли вы какие-либо другие интерпретаторы JS на основе V8 для Python, которые активно поддерживаются и поддерживают встраивание объектов python? Спасибо.

2. Взгляните на V8Py