Форум сайта python.su
0
Хочу использовать Python скрипты в своем приложении на С++. Имеется класс, которые позволяет управлять приложением. Оборачиваю его с помощью SWIG. Все работает. Не понимаю только как созданный объект класса из приложения передать в скрипт. Подскажите пожалуйста. Или я неправильно подхожу к проблеме.
Офлайн
253
Гораздо проще использовать c++ в приложении на python. SWIG обычно используется когда нужно предоставлять интерфейс для многих скриптовых языков. boost_python будет попроще. а лучше всего обойтись ctypes.
akamda1989Я вас тоже не понимаю. Как оно у вас работает если вы его не можете передать?
Все работает. Не понимаю только как созданный объект класса из приложения передать в скрипт
Отредактировано doza_and (Ноя. 3, 2012 08:23:32)
Офлайн
0
Работает, в смысле могу создать экземляр класса в скрипте питона. Я это имел в виду.
А насчет ctypes поясните пожалуйста. Вообще не очень понял. Можно ли управлять внутренностью приложения питон-скриптом, как например js-скриптом? И может информации подкинете по теме этой. Много гуглил, примеров использвания одного в другом море, передачи строковых параметров тоже, а вот решения похожих задач ничего путевого не нашел.
Офлайн
253
Встраивание питона в c и с в питон
http://docs.python.org/2/extending/
Конкретно интерпретация внутри приложения:
http://docs.python.org/2/extending/embedding.html
#include <Python.h> int main(int argc, char *argv[]) { Py_SetProgramName(argv[0]); /* optional but recommended */ Py_Initialize(); PyRun_SimpleString("from time import time,ctime\n" "print 'Today is',ctime(time())\n"); Py_Finalize(); return 0; }
akamda1989
Можно ли управлять внутренностью приложения питон-скриптом, как например js-скриптом?
int main() { .... }
int Main() { .... }
Отредактировано doza_and (Ноя. 3, 2012 18:09:35)
Офлайн
0
Разница в том, что уже есть достаточно большое приложение на С++ с Qt, немаловажным критерием является скорость работы. Есть кусочек приложения, который бы хотел вынести в скрипты для удобства. Вот принимаю решение - js или python. Посибо за ссылки, но это я уже и сам научился делать. Я не понимаю, как класс, с помощью которого можно управляеть приложением передать в скрипт. Класс я с помощью SWIG обернул для питона. Как передать объект этого класса из приложения на С++ в скрипт на Python?
Офлайн
7
Передайте указатель на объект, как дополнительный аргумент в вызываемой функции на питоне.
Офлайн
0
А можете пример показать? как я понимаю нужно мой класс преобразовать в PyObject*. Вот как это сделать?
Офлайн
7
Для передачи аргумента (указателя на C++ объект) в питоновскую функцию используйте преобразование:
PyObject * ptr = PyLong_FromVoidPtr(obj); // obj - указатель на объект
ClassName * obj = (ClassName*) PyLong_AsVoidPtr( ptr ); // ptr - это PyObject* (наш указатель)
Отредактировано Isem (Ноя. 5, 2012 17:11:10)
Офлайн
0
Ясно. Спасибо большое!
Получается класс С++ и он же обернутый SWIG не являются идентичными?
Офлайн