gpt4 book ai didi

python 3 : Python/C API String Problems

转载 作者:行者123 更新时间:2023-11-30 03:47:17 25 4
gpt4 key购买 nike

我正在尝试使用 Python/C API 来运行返回字符串的 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。我还能用什么来存储从函数返回的字符串?

最佳答案

检查所有 Python 函数的返回值是必不可少的。如果出现错误,Python 将返回一个 nullptr。所以 PyUnicode_FromString() 在您的代码中运行良好。它只是段错误,因为 pValue 是您从 PyObject_CallObject() 获得的 nullptr。在此调用打印之后放置 PyErr_Print():

TypeError: argument list must be a tuple

您需要传递一个对象元组作为参数,而不是单个 str。相反,您可能想使用 PyObject_CallFunction(pFunc, "O", pValue)PyObject_CallFunction(pFunc, "s", "ocr_noise.png")

另外查看 PyImport_ImportModule()。此外

std::string result = PyUnicode_FromObject(pValue);

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

关于 python 3 : Python/C API String Problems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33721562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com