我使用了用Python編寫的服務器文件來構建我的Raspberry Pi和我的iPhone之間的連接。我寫了一個簡單的C程序來幫助翻譯莫爾斯密碼。我想從Python服務器程序調用C程序中的translate()
函數。從Python調用C函數
我發現了一個在線教程,跟着它的指令來寫我的C程序和編輯netio_server.py
文件
在我的C程序morseCodeTrans.c
它就像
#include <Python.h>
#include <stdio.h>
static PyObject* py_translate(PyObject* self, PyObject* args)
{
char *letter;
PyArg_ParseTuple(args, "s", &letter);
if(strcmp(letter, ".-") == 0)
return Py_BuildValue("c", 'A');
else if(strcmp(letter, "-...") == 0)
return Py_BuildValue("c", 'B');
...
}
static PyMethodDef morseCodeTrans_methods[] = {
{"translate", py_translate, METH_VARARGS},
{NULL, NULL}
};
void initmorseCodeTrans()
{
(void)Py_InitModule("morseCodeTrans", morseCodeTrans_methods);
}
而且在服務器文件netio_server.py它像:
# other imports
import morseCodeTrans
...
tempLetter = ''
if line == 'short':
tempLetter += '.'
elif line == 'long':
tempLetter += '-'
elif line == 'shortPause':
l = morseCodeTrans.translate(tempLetter)
print "The letter is", l
以上是我會調用C translate()
功能的唯一地方
然後我試圖編譯morseCodeTrans.c
文件是這樣的:
gcc -shared -I/usr/include/python2.7/ -lpython2.7 -o myModule.so myModule.c
編譯成功。 但是,當我跑了Python服務器程序,每當它達到線
l = morseCodeTrans.translate(tempLetter)
剛剛終止沒有任何錯誤信息的服務器程序。
我對Python編程非常陌生,所以我找不出問題出在哪裏。任何幫助?
您可能更容易使用'ctypes'模塊(查看標準庫中的文檔)。 – wjl
是的,我知道ctypes更容易使用。但現在我沒有足夠的時間去閱讀教程,也許以後我會嘗試使用ctypes。感謝您的建議。 – user3554898