Единственным путем я мог думать, кроме того, для ScriptEngineManager устаревшего, Rhino
. Носорог является механизмом JavaScript, записанным в чистом Java, поэтому просто загрузите его или вставка копии от эта ссылка GitHub . Это - очень сложный путь, но вход кода JavaScript неограничен, в отличие от ScriptEngineManager, который не позволяет классы JavaScript и этажерку.
PyObject* obj = ....
PyObject *ret = PyObject_CallMethod(obj, "foo", "(s)", "An arg");
if (!ret) {
// check error...
}
Прочтите ] Документация по Python C API . В этом случае вам нужен протокол объекта .
PyObject * PyObject_CallMethod (PyObject * o, метод char *, формат char *, ...)
Возвращаемое значение: Новая ссылка.
Вызвать метод с именем method объекта o с переменным номером C аргументы. Аргументы C следующие: описывается форматом
Py_BuildValue ()
строка, которая должна создать кортеж. Формат может бытьNULL
, что означает что никаких аргументов не приводится. Возвращает результат вызова на успех илиNULL
в случае неудачи. Это эквивалент Python выражениеo.method (args)
. Обратите внимание, что если вы передаете толькоPyObject * args
,PyObject_CallMethodObjArgs ()
- это более быстрая альтернатива.
И
PyObject * PyObject_CallMethodObjArgs (PyObject * o, PyObject * name, ..., NULL)
Возвращаемое значение: Новая ссылка.
Вызывает метод объекта
o
, где дается имя метода. как строковый объект Python по имени. Это вызывается с переменным числомPyObject *
аргументы. Аргументы предоставляется как переменное количество параметры, за которыми следуетNULL
. Возврат результат вызова в случае успеха, илиNULL
при сбое.
Ваш пример:
PyObject* ret = PyObject_CallMethod(obj, "foo", "(s)", "An arg");