python嵌入:将列表从C传递给python函数
python embedding: passing list from C to python function
尝试从C++将列表传递给python不起作用。以下是相关代码(使用其他相关帖子编写):
Py_Initialize();
PyObject *sys = PyImport_ImportModule("sys");
PyObject *path = PyObject_GetAttrString(sys, "path");
PyList_Append(path, PyString_FromString("."));
// Build the name object
pName = PyString_FromString("MySolver");
// Load the module object
pModule = PyImport_Import(pName);
// pDict is a borrowed reference
pDict = PyModule_GetDict(pModule);
// pFunc is also a borrowed reference
pFunc = PyObject_GetAttrString(pModule, "mysolve");
if (!PyCallable_Check(pFunc))
PyErr_Print();
PyObject *l = PyList_New(xvarcount);
for(size_t i=0; i<xvarcount; i++){
pValue = PyInt_FromLong(0);
PyList_SetItem(l, i, pValue);
}
PyObject *arglist = Py_BuildValue("(o)", l);
pValue = PyObject_CallObject(pFunc, arglist);
MySolver.py 的 python 脚本是:
def mysolve(vals):
print vals
return 0
我正在按照其他地方的建议做所有事情。 mysolve 函数只是没有被调用,C++程序只是继续前进,而不会在PyObject_CallObject函数调用时报告任何错误。请注意,如果我将单个参数作为元组传递给 my solve 函数,则代码工作正常。但是有了列表,它不起作用。任何想法,为什么它不起作用?
Py_BuildValue的用法是错误的。例如 http://docs.python.org/release/1.5.2p2/ext/buildValue.html 网络上的此方法的文档有这个错别字,这就是为什么我使用小 o 而不是大写的 O 的原因。正确的调用是:Py_BuildValue("(O)", l)
相关文章:
- 使用C++指针调用 python 函数
- 使用 pybind11 调用 Python 函数时避免复制输入数据
- 从 C++ 函数与 Python 函数返回的不一致值用于偏斜正态分布
- 如何使用 pybind11 将 python 函数保存到静态 c++ 容器中?
- 在 cpp 中嵌入 python:如何获取指向 python 函数(而不是 PyObject)的 C 指针?
- 困在PyObject_GetAttrString():如何从C++代码中获取Python函数脚本
- 如何通过C++在Python函数中传递字符串参数
- 在 C 代码中调用 Python 函数时第三次出现访问冲突写入位置错误
- 通过 Boost Python 将 Python 函数转换为 C++,用作回调
- 获取 C++ 中的 Python 函数参数名称
- 使用来自C++的任意数量的参数(在编译时未知)调用 Python 函数
- 如何从Qt C++项目运行Python函数
- 如何从 c++ 调用另一个文件中定义的 python 函数?
- 无法理解提升 python 函数导出中的语法
- 执行 c++ 中字符串中提供的 Python 函数
- 使用 pybind11 从 C++ 调用 Python 函数
- 从C 中的多个线程调用Python函数
- 使用 C++ 中的 python 函数
- 如何使用 pybind11 将 python 函数转换为 std::function
- TensorFlow:可用的Python函数的C++等价物