编辑:我在流程开始时错过了$.ajax({
data: {"data": data},
dataType: "json",
url: 'yourURl',
success: function(data){
return data;
}
。
我在使用Py_BuildValue和PYArg_ParseTuple时遇到了一些奇怪的行为。
首先,每当我尝试构建一个整数时,我在Py_BuildValue上得到一个seg错误。 浮点数,对象或字符串不会发生这种情况。
其次,当我尝试解析一个元组时,除非我正在解析包含单个字符串的元组:“s”或单个PyObject:“O”,否则我也会遇到seg错误。 (如果我尝试解析两者,我也会遇到一个段错误:“Os”)
以下是segfault的两个例子:
Py_Initialize()
和ParseTuple的一个例子(编辑正确的buildvalue并测试api调用):
#include <Python.h>
#include <iostream>
using namespace std;
int main() {
Py_Initialize(); // <-- Missing this
PyObject* pString = Py_BuildValue("s", "hello"); //<- Works fine
PyObject* pFloat = Py_BuildValue("f", 2.3); //<- Works fine
PyObject* pInt = Py_BuildValue("i", 2); // <- Seg faults
return 0;
}
我使用anaconda python 2.7
在RedHat上运行我编译:
#include <Python.h>
#include <iostream>
using namespace std;
int main() {
Py_Initialize(); // <-- Missing this
PyObject* pFloat = Py_BuildValue("f", 2.3);
if(!pFloat)
cout << "Error Float" << endl;
PyObject *pTuple = PyTuple_New(1);
if(!pTuple)
cout << "Error Creating Tuple" << endl;
if(PyTuple_SetItem(pTuple, 0, pFloat)) //Returns 0 on success
cout << "Error Set Item" << endl;
// parse tuple items
float f;
if(!PyArg_ParseTuple(pTuple, "f", &f))
PyErr_SetString(PyExc_TypeError, "invalid parameter");
return 0;
}
使用anaconda python可能有些问题吗?我已经把问题分解为最简单的情况,我可以想出来......
答案 0 :(得分:2)
我看到了几个问题。
f
的{{1}}选项从C / C ++ Py_BuildValue
构造Python float。你传递了一个字符串,而不是双字符串。
每次调用Python C-API函数后,都需要测试返回值以查看是否发生了错误。这需要在每次通话后完成。
编辑 - 还有一个问题。
将Python C-API调用嵌入到C / C ++程序中时,需要通过调用double
来初始化解释器。