Python3:Python/CAPI字符串问题

Python3:Python/CAPI字符串问题,python,c++,python-3.x,python-c-api,Python,C++,Python 3.x,Python C Api,我试图使用Python/CAPI运行一个返回字符串的Python函数。我想把返回的字符串存储到C++变量中,但不能让它工作。我正在使用Python3,而PyString\u FromString()方法似乎不再有效。这是我的密码: int main(int argc, char *argv[]) { PyObject *pName, *pModule, *pDict, *pFunc, *pValue; Py_Initialize(); pName = PyUnicod

我试图使用Python/CAPI运行一个返回字符串的Python函数。我想把返回的字符串存储到C++变量中,但不能让它工作。我正在使用Python3,而
PyString\u 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\u text(value)
。我试图将
“ocr\u noise.png”
作为参数传入。你知道我该怎么做吗


编辑2:我不需要像代码中那样使用std::string。我还可以使用什么来存储函数返回的字符串?

检查所有Python函数的返回值非常重要。如果出现错误,Python将返回一个
nullptr
。因此
PyUnicode\u FromString()
在您的代码中运行良好。这只是因为
pValue
是从
PyObject\u CallObject()
获得的
nullptr
,所以会出现故障。将
PyErr\u Print()
放在这个调用之后打印:

TypeError: argument list must be a tuple
您需要传递一个对象元组作为参数,而不是单个
str
。相反,您可能希望使用
PyObject\u调用函数(pFunc,“O”,pValue)
PyObject\u调用函数(pFunc,“s”,“ocr\u noise.png”)

另外,请查看
PyImport\u ImportModule()
。此外

std::string result = PyUnicode_FromObject(pValue);

甚至不应该编译,因为它返回的是
PyObject*
而不是
string

你说的“好像
PyUnicode\u FromString()
方法不再工作了”是什么意思?你有例外吗?断层?还有别的吗?我是说PyString_FromString()。我的错。在Python3中没有
PyString\u FromString
这样的东西。您是否考虑过使用Boost.Python这样的现有包装库来代替低级的C API?它应该使这些事情变得更简单。也就是说,请阅读这里的指导原则,您的问题是根据定义脱离主题的,正如这里所解释的。还有一个问题,如果您确实需要
字符串
,那么我应该如何存储返回的字符串?可能一点用都没有
pValue
应该已经是unicode对象。有关如何从Python unicode对象获取c字符串的更多详细信息,请参阅。