Python 3:Python/C API字符串问题
Python 3: Python/C API String Problems
我正在尝试使用Python/C API来运行返回字符串的Python函数。我想将返回的字符串存储到C++变量中,但我无法使其工作。我使用的是Python3,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);
甚至不应该编译,因为它返回的是CCD_ 15而不是CCD_。
相关文章:
- 如何将真正的字符串从python c-api转换为python脚本
- 如何在C++中将 Python 字符串转换为其转义版本?
- 从 Python 接收C++字符串
- 我如何在C++像在 Python 中一样实现 f 字符串?
- 如何将 Python 字符串传递给 C++ (extern C) 函数
- C++ python 中的函数返回数字而不是字符串
- C++未知长度字符串的数组,其行为类似于 Python 字符串列表
- 如何在 c++ 中进行 python 样式的字符串切片
- 如何使用 CTypes 将 wchar_t** - 以空结尾的 UNICODE 字符串数组 - 返回到 Python 脚
- 解析 c++ 中的字符串,如 python 的解析包
- 如何通过C++在Python函数中传递字符串参数
- 尝试打印字符串时"Python Exception <class 'gdb.error'> There is no member named _M_dataplus."
- 如何在 Python 或 C++ 中执行任意字符串?
- 使用 ctypes 和 wchar_t 时如何从 C++ 获取字符串到 python?
- QtcpServer:Qt如何获取python字符串进行标记
- Swig:如何类型映射c ++字符串常量和python字符串?
- 将C++字符串类转换为Python字符串
- python字符串使用特殊字符发送到c++dll,崩溃
- python字符串管理和内存
- 如何在绑定中使字符串类C++"own"自动转换为python字符串