IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaçage autre langage Python Discussion :

SWIG probleme pour lancer le script python dans mon code C++ et récupérer un objet


Sujet :

Interfaçage autre langage Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 30
    Points : 27
    Points
    27
    Par défaut SWIG probleme pour lancer le script python dans mon code C++ et récupérer un objet
    Bonjour,

    grâce à swig, j'arrive à étendre une classe C++ en Python.Maintenant j'aimerais créer un objet en python et pouvoir le récupérer dans le code C++

    créer l'objet et l'utiliser dans le script marche très bien, mais j'aimerais récupérer l'objet dans mon code C++

    voici mon main pour exécuter le script :
    Code : 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
     
    int main()
    {
        //Test existance du fichier
        ifstream fichier("Perso.py");
     
        if (fichier.fail()) {
            cout << "Fichier de script introuvable : " << "Perso.py" <<"\n";
            return 0;
        }
     
        // Ouvre le script python a executer
        FILE* pyFile = fopen("Perso.py", "r");
     
        Py_Initialize();
     
        // Execute le script
        string exec ( "execfile(r\"" );  // note r for raw Python string.
        exec += "Perso.py" ; exec += "\")" ;
        PyRun_SimpleString( (char*) exec.c_str() );
     
        Py_Finalize();
    }

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 30
    Points : 27
    Points
    27
    Par défaut
    Bon j'ai un peu avancé, j'ai modifié mon main, il appel maintenant une fonction de mon script.

    J'utilise ma fonction pour envoyer des arguments à Python, le souci est que les arguments que j'arrive a envoyer ne sont que de type int ou string, et j'aimerai envoyer des objets, quelqu'un sait comment faire ?

    voici mon main actuel :

    Code : 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
     
         PyObject *pName, *pModule, *pDict, *pFunc, *pValue;
         PyObject *pClass, *pInstance, *pArgs;
     
         // Initialize the Python Interpreter
         Py_Initialize();
     
         // Build the name object
         pName = PyString_FromString("Perso");
     
         if(pName == NULL) 
           cout<< "error" << endl;
     
         // Load the module object
         pModule = PyImport_Import(pName);
     
         if(pName == NULL) 
            cout<< "error" << endl;
     
         // pDict is a borrowed reference 
         pDict = PyModule_GetDict(pModule);
         if(pDict == NULL) 
             cout<< "error" << endl;
     
         // pFunc is also a borrowed reference 
         pFunc = PyDict_GetItemString(pDict, "test");
         if(pFunc == NULL) 
             cout<< "error fonction" << endl;
     
         if (PyCallable_Check(pFunc)) 
         {
             pArgs = PyTuple_New(1);                     // create list of arg
             pValue = PyInt_FromLong(123);           // a la place de 123 jaimerai transmettre une instance
             PyTuple_SetItem(pArgs, 0, pValue);          
            PyObject_CallObject(pFunc, pArgs);
         } else 
         {
             PyErr_Print();
         }
     
          // Clean up
         Py_DECREF(pModule);
         Py_DECREF(pName);
     
         Py_Finalize();

    J'ai essayé d'utiliser Py_BuildValue pour caster mon objet en PyObject mais ça ne marche pas

  3. #3
    Membre habitué

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 27
    Points : 170
    Points
    170
    Par défaut
    Il faut utiliser des pointeurs et il me semble déclarer la classe des deux côté (mais pas sûr).
    http://www.swig.org/papers/PyTutoria...Tutorial98.pdf.
    L'article est un peu vieux, mais il est bien expliqué je trouve (et je n'ai pas accès au site SWIG depuis le taf :/).

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 30
    Points : 27
    Points
    27
    Par défaut
    Ok merci, je vais regarder ça

Discussions similaires

  1. Lancer script python dans fenêtre C++
    Par quake3 dans le forum Débuter
    Réponses: 2
    Dernier message: 09/05/2012, 19h00
  2. Intégrer un script python dans du code java
    Par Thomas77380 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 01/06/2011, 13h32
  3. problème pour déployer un script python utilisant pybel / swig
    Par Jenny_ dans le forum Déploiement/Installation
    Réponses: 1
    Dernier message: 18/02/2010, 09h55
  4. probleme pour lancer mon script
    Par cylyluz dans le forum Linux
    Réponses: 1
    Dernier message: 05/05/2009, 17h49
  5. Réponses: 2
    Dernier message: 19/07/2005, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo