Я пытаюсь использовать API Python/C для запуска функции Python, которая возвращает строку. Я хочу сохранить эту возвращаемую строку в переменной C++, но не могу заставить ее работать. Я использую Python 3, и похоже, что метод PyString_FromString()
больше не работает. Вот мой код:
int main(int argc, char *argv[])
{
PyObject *pName, *pModule, *pDict, *pFunc, *pValue;
Py_Initialize();
pName = PyUnicode_FromString("ocr");
pModule = PyImport_Import(pName);
pDict = PyModule_GetDict(pModule);
pFunc = PyDict_GetItemString(pDict, "get_text");
pValue = PyUnicode_FromString("ocr_noise.png");
pValue = PyObject_CallObject(pFunc, pValue);
std::string result = PyUnicode_FromObject(pValue);
Py_DECREF(pModule);
Py_DECREF(pName);
Py_DECREF(pValue);
Py_Finalize();
return 0;
}
Файл Python называется ocr.py
, а функция, которую я пытаюсь вызвать, называется get_text(value)
. Я пытаюсь передать "ocr_noise.png"
в качестве аргумента. Есть идеи, что мне делать?
РЕДАКТИРОВАТЬ 2: мне не нужно использовать std::string как в коде. Что еще я могу использовать для хранения строки, возвращаемой функцией?
PyUnicode_FromString()
больше не работает? Вы получаете исключение? Сегфолт? Что-то другое? - person Andrea Corbellini   schedule 15.11.2015PyString_FromString
. - person Andrea Corbellini   schedule 16.11.2015PyUnicode_AS_DATA
, который возвращаетstd::wstring
- person Andrea Corbellini   schedule 16.11.2015PyUnicode_AsUTF8
, если вы действительно хотитеstring
- person Andrea Corbellini   schedule 16.11.2015