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 :

Implémenter le code d'une méthode C++ via un script python


Sujet :

Interfaçage autre langage Python

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Implémenter le code d'une méthode C++ via un script python
    Bonjour,

    je suis actuellement en stage et je dois programmer une simulation de réseaux en C++ et en Python. Il s'agit en fait de programmer les classes à instancier en C++, de compiler le tout, et d'écrire des scripts Python pour pouvoir effectuer une simulation, en utilisant les classes C++. Le simulateur est à évènements discrets. Le problème est que je ne peux pas, à priori, connaître le code d'une méthode C++ : c'est l'utilisateur, lorsqu'il écrit son script, qui doit décider du comportement de la méthode.
    Par conséquent, j'aurai aimé savoir s'il était possible de définir une méthode dans le script Python qui soit exécutée par mon code C++, lui-même appelé par le simulateur qu'on crée dans le script python.

    Je ne sais pas si c'est très clair, mais je n'arrive pas à formuler mieux les choses. N'hésitez pas à me demander plus de détails, si besoin s'en fait sentir.

    Je vous remercie d'avance de l'attention que vous pourrez porter à ma question.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour et bienvenu,
    Je ne sais pas si cela répond complètement à ta question, mais as-tu regardé du côté de Boost.Python ?

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Il s'avère que mon projet entre dans le cadre de l'utilisation de PyBindGen et non de Boost. Le problème est que PyBindGen est en état de projet. Trouver des aides à l'utilisation de ce module s'avère compliqué...

    Une solution à mon problème serait de définir la méthode en C++ dont je ne peux pas connaître à priori le code, juste ce qu'elle renvoit comme étant :

    retour X() {
    // execution d'un script
    }
    L'exécution du script me donnant les infos nécessaires placées dans la valeur de retour.
    Cette solution est-elle réalisable?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    Je trouve que c'est très confus :

    Tu veux pouvoir créer une méthode en python qui sera "vue" comme une méthode dans une classe en C++ sans recompiler ta classe C++ ?

    Ou bien tu veux créer une classe C++ qui peut exécuter du code python et en extraire le résultat en le retournant dans une méthode ?

    Ou autre chose ?

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    ce serait plutôt :

    créer une méthode C++. Elle exécute du code Python et en extrait le résultat qu'elle retourne.

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour, je me permets de revenir sur ce message car j'ai trouvé, sur ce forum, un topic assez intéressant et qui pourrait m'être utile :
    http://www.developpez.net/forums/d51...thon-code-cpp/

    Je travaille sur NS-3, un simulateur de réseaux qui utilise un utilitaire de compilation : waf
    http://code.google.com/p/waf/

    Cependant, lorsque j'ai essayé de compiler le code de Ryo2468, j'ai une erreur de compilation

    leia:/work/ns-allinone-3.4/ns-3.4> ./waf
    Entering directory `/work/ns-allinone-3.4/ns-3.4/build'
    [551/556] cxx_link: build/optimized/scratch/script_5.o -> build/optimized/scratch/script
    optimized/scratch/script_5.o: In function `main':
    /work/ns-allinone-3.4/ns-3.4/build/../scratch/script.cc:22: undefined reference to `Py_Initialize'
    /work/ns-allinone-3.4/ns-3.4/build/../scratch/script.cc:25: undefined reference to `PyRun_SimpleStringFlags'
    /work/ns-allinone-3.4/ns-3.4/build/../scratch/script.cc:29: undefined reference to `PyRun_SimpleStringFlags'
    /work/ns-allinone-3.4/ns-3.4/build/../scratch/script.cc:32: undefined reference to `Py_Finalize'
    collect2: ld a retourné 1 code d'état d'exécution
    Build failed
    -> task failed (err #1):
    {task: cxx_link script_5.o -> script}


    Voici le code de Ryo2468 :

    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
     
    #include "python2.5/Python.h"
    #include <fstream>
    #include <iostream>
    using namespace std;
     
    int main() { 
     
        ///Test d'existance du fichier
        ifstream fichier("log.py"); 
     
        if (fichier.fail()) {
            cout << "Fichier de script introuvable : " << "log.py" <<"\n";
            return 0;
        } 
     
        ///Lance le script 
        cout << "\n--- Execution du script : " << "log.py" <<" ---\n"; 
     
        // Ouvre le script python a executer
        //FILE* pyFile = fopen("log.py", "r"); 
     
        Py_Initialize(); 
     
        //Test : ecriture d'une commande Python
        PyRun_SimpleString(    "print \"Bonjour\""); 
     
        string exec ( "execfile(r\"" );  // note r for raw Python string.
    	    exec += "log.py" ; exec += "\")" ;
    	PyRun_SimpleString( (char*) exec.c_str() );    
     
        Py_Finalize(); 
     
        return 1;
     
    }
    et le log.py, bien plus simple que ce que je veux faire par la suite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print "Log : Bonjour"
    J'ai cru comprendre qu'il s'agissait d'un problème d'édition de liens. Cependant, je ne sais pas comment faire cette édition avec l'utilitaire waf, et malgré la documentation...
    Si quelqu'un connaît cet utilitaire, pourrait-il me dire s'il sait si l'édition de liens est faisable?
    Et surtout, est-ce vraiment un problème d'édition de liens?

    Merci d'avance

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    Regarde à partir de ce chapitre : http://freehackers.org/~tnagy/wafboo....html#common_c

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/04/2014, 14h54
  2. Imposer du code dans une méthode redéfinie
    Par JCD21 dans le forum Débuter avec Java
    Réponses: 13
    Dernier message: 25/02/2012, 15h06
  3. [PHP 5.3] Insérer du code dans une balise SPAN via un include
    Par beegees dans le forum Langage
    Réponses: 0
    Dernier message: 05/10/2010, 11h25
  4. lancer une méthode c# via une confirmbox javascript
    Par ferdi05 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 14/05/2009, 18h04
  5. Ouvrir une session automatiquement via un script
    Par NewB dans le forum Administration système
    Réponses: 8
    Dernier message: 20/03/2008, 10h33

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