2013-10-08 190 views
1

我正在將c庫集成到python應用程序中。我想寫一個小程序:
在python應用程序中加載共享庫後,我需要從python大小傳遞變量列表到C庫的包裝(我打電話)。 在Python的一面:在c應用程序中嵌入Python應用程序

c_args = [5,6] 
PyPrintVal(c_args) 

在C面:

PyPrintVal(PyObject *c_args) 
{ 
     int i=0; 
     int j=0; 
     printf("In eINoiseRemoval\n"); 
     if (!PyArg_ParseTuple(c_args, "ii", &i,&j)) 
     {  fprintf(stderr, "error in parsing\n"); 
       return -1; 
     } 
     printf(i1=%d j=%d\n, i,j) 
} 

然後我得到段錯誤?還有什麼?
我正在尋找http://docs.python.org/2/extending/extending.html#a-simple-example

但沒有得到任何答案。 感謝

+0

調用'PyPrintVal(* c_args)'。 – falsetru

+0

我的意思是:在python端調用'PyPrintVal(* c_args)'。 – falsetru

+0

正確的ctypes。來自ctypes import *; handle = CDLL(「example.so」); PyPrintVal = handle.PyPrintVal; PyPrintVal.argtypes = [py_object] – Javed

回答

1

您可以使用gdb找出到底是哪裏這個段錯誤是:

$ gdb python 
...... 
> set args my_python_script.py 
> run 
....... 
Segmentation Fault 
> where 

這會給你一個堆棧跟蹤和指向你到段錯誤的確切位置。

+0

感謝作品和這個PyList_GetItem(,)調用也起作用! – Javed

+0

現在它看起來像這樣i = PyInt_AsLong(PyList_GetItem(c_Arg,0)); i = PyInt_AsLong(PyList_GetItem(c_Arg,0)); printf(i =%d j =%d \ n,i,j);輸出i = 5 j = 6 – Javed