【发布时间】:2021-05-28 04:11:27
【问题描述】:
我在我的 C++ 代码中嵌入了一个 Python 模块,并且我正在使用 Python/C API。 我需要调用 Python 模块函数并获取结果。 该函数获取一个无符号整数和一个双精度作为输入参数并输出一个列表。 我使用以下方法调用该函数:
unsigned int num_units = 10;
double max_time = 15.12;
PyObject *output_list = PyObject_CallMethod(sample_object, "get_list",
"(I)", num_units, "(d)", max_time);
在get_list 函数中添加打印语句时,我从 Python 方面注意到的是,参数没有传递给函数。
我想我的语法可能不对?
更新: 我最初使用以下语法尝试了@Ruzihm 的建议,但没有成功。事实证明,python 代码中还有其他语法问题阻止了代码的正确执行,并且我的错误检查都没有发现它。修复问题后,代码运行完美。
PyObject *output_list = PyObject_CallMethod(sample_object, "get_list",
"Id",num_units, max_time);
我还尝试将 CallMethodObjArgs 与以下代码一起使用:
PyObject *func_obj, *num_units_obj, *max_time_obj;
num_units_obj = PyLong_FromUnsignedLong(num_units);
max_time_obj = PyFloat_FromDouble(max_time);
func_obj = PyUnicode_FromString("get_list");
PyObject *output_list = PyObject_CallMethodObjArgs(sample_object,
func_obj, num_units_obj,
max_time_obj, NULL);
Py_DECREF(func_obj);
Py_DECREF(num_units_obj);
Py_DECREF(max_time_obj);
Python 函数定义也如下所示:
def get_list(self, num_units, max_time):
非常感谢任何帮助。
【问题讨论】:
-
“参数没有被传递给函数” - 那么,传递了什么?这真的需要一个minimal reproducible example - 我们强调“可重现”而不是滴灌小sn-ps
-
你找到解决这个问题的方法了吗?
-
@Ruzihm 你的答案也适用于我(
PyObject_CallMethodObjArgs也适用于我的问题形式)。问题显然出在 OP 未显示的代码中。 -
@Ruzihm,正如你们提到的那样,问题出在其他地方,我在代码中进行的所有检查都没有发现问题。我建议的您的方法和其他方法(使用 CallMethodObjArgs)现在都可以正常工作。如果可以,请将其他方法添加到您的答案中,我会接受您的。
标签: python c++ python-c-api