Введение
У меня есть python код, вызываемый из c ++, с использованием пакета boost. python. Я могу передать некоторые переменные при вызове MyFunc
из .py следующим образом:
Py_SetPythonHome(pySearchPath);
try
{
Py_Initialize();
numpy::initialize();
object module = import("__main__");
object name_space = module.attr("__dict__");
exec(python_full, name_space, name_space);
object MyFunc = name_space["MyFunc"];
object result = MyFunc(var1, var2, var3)); //HERE
//Python results storage
numpy::ndarray ret = extract<numpy::ndarray>(result);
int input_size = ret.shape(0);
std::vector<std::vector<double>> v(input_size, std::vector<double>(50));
}
catch (error_already_set)
{
PyErr_Print();
}
Однако мне нужна еще одна переменная, давайте будем называть ее var4
, чтобы обновить, основываясь на C ++ GUI, на каждом l oop моего python кода. Если я правильно понимаю, MyFunc(var1, var2, var3)
передаст значение только один раз, в начале, поэтому, даже если я изменю значение var1
после его выполнения, это не повлияет на python код.
Проблема
Есть ли способ выставить переменную c ++, чтобы она обновлялась "вживую" в python коде? Если бы все было на одном языке, это было бы тривиально (например, с глобальными переменными), но на грани двух сред это становится хитрым.
Редактировать:
Я пытался выставить переменную gui_cancel
следующим образом:
BOOST_PYTHON_MODULE(cbtest)
{
class_<callback_handler, boost::noncopyable>("callback_handler", no_init)
.def_readwrite("gui_cancel", &callback_handler::gui_cancel);
;
};
Но получить к ней доступ из python следующим образом:
import cbtest
holder = cbtest.callback_handler
print(holder.gui_cancel)
Дайте мне только свойство объекта:
<property object at 0x0000012D9AA90BD8>