C++ 如何将元组从Python 3.6传递到C++;
全嵌入式C++ 如何将元组从Python 3.6传递到C++;,c++,python-3.x,C++,Python 3.x,全嵌入式Python和C++的小问题。问题是我有一个Python代码,它将返回一个元组,在本例中,该语句是: def test(): x = 1; y=2; c=3; d=4; return [x,y,c,d] 在C++中,我以以下方式嵌入了代码: pValue = PyObject_CallObject(pFunc, pArgs); Py_DECREF(pArgs); if (pValue != NULL) { printf("Result of cal
Python
和C++
的小问题。问题是我有一个Python
代码,它将返回一个元组,在本例中,该语句是:
def test():
x = 1;
y=2;
c=3;
d=4;
return [x,y,c,d]
在C++
中,我以以下方式嵌入了代码:
pValue = PyObject_CallObject(pFunc, pArgs);
Py_DECREF(pArgs);
if (pValue != NULL)
{
printf("Result of call: %d\n", PyTuple_GetItem(pArgs, i, pValue));
}
出于某些原因,打印输出如下所示:
通话结果:1846660304
还尝试返回字符串,这也不起作用。只有一个有效的方法是返回,例如返回h和在C++
中使用PyTuple\u GetItem
,而不是使用PyLong\u AsLong()
有人能告诉我如何读取返回值到C++
的正确方向吗?我对Python
相当陌生,不幸的是Python
文档水平很差,至少在这种情况下没有代码示例或任何东西。元组由(1,2,3,4)包围,而不是括号。尝试更改Py代码中的元组,然后重新运行代码。您有四个问题:
- 函数返回的是
,而不是列表
。使用元组
是不合适的;及PyTuple\u GetItem
不需要三个参数,只需要两个;及PyTuple\u GetItem
- 由于在任何情况下都无法确定返回类型,因此最好使用
;及PyObject_GetItem
- 最重要的是,你看错了对象李>
PyTuple\u GetItem(pArgs,i,pValue)
,它将尝试在pArgs
中查找。您可能需要访问什么pValue
:
PyObject_GetItem(pValue, i)
这是一个列表,不是元组。我猜<>代码> PytuPrPulgGestEng/<代码>返回变量的内存地址,而不是它的实际值。是的,但是如何真正处理C++中的AKA如何提取数据?或者换句话说,从Python脚本传递多个参数到C++的最佳方法是什么?如何提取数据?应该用更严格的警告编译,当您尝试使用<代码> %D/<代码>格式打印指针时,您会出错。是的,我真的不知道该怎么办,怎么办?“使用更严格的警告进行编译”(使用visual studio 2017)。无论如何,我将代码更改为def test():x=1;y=2;c=3;d=4;return(x,y,c,d)嗨,我按照您的建议进行了尝试,结果是整个可执行文件崩溃:(即时调试器使用printf在该行显示uncaught异常。我也尝试了PyObject_GetItem(pValue,0),但结果相同……此外,
PyObject_GetItem
将为您提供另一个PyObject*
(表示整数)它不能像C整数那样传递给<代码> PROTFF <代码>。HMM OK我理解;如何正确地传递给Prtff。底线是我只需要从Python得到返回值到C++中的变量,我只是不知道如何做它。Python文档中没有代码示例是没有多大用处的。我真的不知道,但是Jeronimo你说在docs.python.org/3/extensing/extensing.html页面上有一个关于如何对字符串执行相同操作的示例。我读了两遍,都找不到你指的是哪个示例?