Bonjour à tous,
je suis confronté à un problème suite à un projet que j'effectue et j'aurai besoin de votre aide svp. Voila à partir d'un programme en C je fais appel à une fonction python qui me retourne des données, jusque là tous va bien j'ai suivi un tutoriel et cela fonctionne parfaitement. Pour l'instant ma fonction python me retourne juste un chaine de caractère!
j'ai ensuite voulu que ma fonction python effectue un peu plus de chose, j'ai donc du faire appel à des libs python ( "from ... import ..." ) pour pourvoir effectuer le travail souhaité. C'est là que le problème arrive, dès lors de l'ajout d'un import dans mon fichier python rien ne va plus, mon programme C crash et me retourne un segmentation fault!
Voici le code que j'utilise:
Code C:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 #include <iostream> #include <Python.h> using namespace std; // Déclarer les objets python indispensables PyObject *pName, *pModule, *pArgs, *pFunc,*pRet; int main() { // Petite string C++ à échanger string str = "I'am a C++ string."; // Initialise le Python Interpreter comme StandAlone (pas besoin d'installation mais besoin de la DLL) Py_NoSiteFlag = 1; Py_FrozenFlag = 1; Py_IgnoreEnvironmentFlag = 1; Py_SetPythonHome((char *)("")); Py_SetProgramName((char *)("")); Py_Initialize(); PyRun_SimpleString ("import sys; sys.path.insert(0, '/home/pi/Desktop/test2')"); // importer le script python (.py) pModule = PyImport_ImportModule("capteur"); // Passer le str comme argument python pArgs = Py_BuildValue("(s)", str.c_str()); // Appeler la fonction dans le script pFunc = PyObject_GetAttrString( pModule,"fonction_capteur"); pRet = PyEval_CallObject(pFunc, pArgs); // Faire un echo du résultat if ( PyString_Check(pRet) ){ cout << "result from python : " << PyString_AsString(pRet) << endl; } // Ecrire les erreurs pythons ( if any ) PyErr_Print(); // Libérer les pointers Py_DECREF(pFunc); Py_DECREF(pRet); Py_DECREF(pArgs); Py_DECREF(pModule); // Finish the Python Interpreter Py_Finalize(); return 0; }
Code python :
La simple supression de la ligne "from sense_hat import SenseHat" permet de faire fonctionner le programme correctement mais dès que je l'ajoute plus rien !!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 #!/usr/bin/env python # -*- coding: utf-8 -*- # # Script principal appelé par C++ # Attention ce script et tous les scripts Python doivent être en UTF-8 avec # -*- coding: utf-8 -*- from sense_hat import SenseHat def fonction_capteur(pData): print "#helloEntry: " + pData # Venant de C++ result = "value from python (string)" # Retour du résultat dans C++ return result
Merci beaucoup pour votre aide
Partager