J'ai utilisé un fichier serveur qui a été écrit en Python pour créer une connexion entre mon Raspberry Pi et mon iPhone. Et j'ai écrit un simple programme C qui aide à traduire le code morse. Je veux appeler la fonction translate()
dans le programme C à partir du programme serveur Python.Appel de la fonction C à partir de Python
J'ai trouvé un tutoriel en ligne et suivi ses instructions pour écrire mon programme C et éditer le fichier netio_server.py
Dans mon programme C morseCodeTrans.c
c'est comme
#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);
}
Et dans le fichier du serveur netio_server.py il est comme:
# 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
au-dessus est le seul endroit que je qualifierais la fonction C translate()
J'ai ensuite essayé de compiler le fichier morseCodeTrans.c
comme ceci:
gcc -shared -I/usr/include/python2.7/ -lpython2.7 -o myModule.so myModule.c
La compilation a réussi. Mais quand je courais le programme serveur Python, chaque fois qu'il a atteint la ligne
l = morseCodeTrans.translate(tempLetter)
Le programme serveur vient de se terminer sans message d'erreur. Je suis très nouveau dans la programmation Python, donc je ne pouvais pas savoir où est le problème. De l'aide?
Vous pourriez avoir un temps plus facile avec le module 'ctypes' (regardez la documentation de la bibliothèque standard). – wjl
Oui, je sais que ctypes est plus facile à utiliser. Mais maintenant je n'ai pas assez de temps pour passer par le tutoriel, peut-être que plus tard j'essaierai d'utiliser les ctypes. Merci pour la suggestion. – user3554898