API Python C, изменить файл Python и вызвать модифицированный метод ⇐ C++
-
Anonymous
API Python C, изменить файл Python и вызвать модифицированный метод
У меня есть приложение с файлами Python рядом с ним, из которого будут вызываться методы. А в идеале изменения файла должны отслеживаться и если файл меняется, то он загружается и вызываются измененные методы. Например, загрузка кода Python:
auto p_name = PyUnicode_FromString(_python_file_name.c_str()); если (!p_name) { ... } автоматический модуль = PyImport_Import (p_name); если (!модуль) { ... } _dict = PyModule_GetDict(модуль); если (!_dict) { ... и вызов функции кода
tryUpdateFile(); //проверяет, когда файл был изменен, и при необходимости загружает новый auto p_func = PyDict_GetItemString(_dict, "createPacket"); if (!p_func || !PyCallable_Check(p_func)) { ... } p_return = PyObject_CallFunction(p_func, "i", id); auto res = parseStringFromPython (p_return); //анализируем возврат к строке Py_XDECREF(p_return); вернуть разрешение; Я ожидал, что после изменения модуля PyObject_CallFunction вызовет новую функцию, но вызывается старая. Что я делаю не так?
У меня есть приложение с файлами Python рядом с ним, из которого будут вызываться методы. А в идеале изменения файла должны отслеживаться и если файл меняется, то он загружается и вызываются измененные методы. Например, загрузка кода Python:
auto p_name = PyUnicode_FromString(_python_file_name.c_str()); если (!p_name) { ... } автоматический модуль = PyImport_Import (p_name); если (!модуль) { ... } _dict = PyModule_GetDict(модуль); если (!_dict) { ... и вызов функции кода
tryUpdateFile(); //проверяет, когда файл был изменен, и при необходимости загружает новый auto p_func = PyDict_GetItemString(_dict, "createPacket"); if (!p_func || !PyCallable_Check(p_func)) { ... } p_return = PyObject_CallFunction(p_func, "i", id); auto res = parseStringFromPython (p_return); //анализируем возврат к строке Py_XDECREF(p_return); вернуть разрешение; Я ожидал, что после изменения модуля PyObject_CallFunction вызовет новую функцию, но вызывается старая. Что я делаю не так?
Мобильная версия