Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1369 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [c++/Python] Passer une instance c++ à un script python

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c++/Python] Passer une instance c++ à un script python

n°1209078
Laurent187​5
Posté le 27-09-2005 à 18:48:23  profilanswer
 

Bonjour à tous,
 
Comme je ne sais pas ou poster je l'ai mis ici  :)  
 
J'essaie de passer une instance d'une classe C++ vers un script Python
J'ai définie la classe en python en utilisant Boost.
J'arrive à récupérer un ojbet de python, mais je n'arrive pas à envoyer un objet (instance) dans un script  
 

Code :
  1. #include <iostream>
  2. #include <fstream>
  3. #include <string>
  4. using namespace std;
  5. #include <boost/python.hpp>
  6. #include <graminit.h>
  7. using namespace boost::python;
  8. // Classe "Base" C++
  9. class Base
  10. {
  11. public:
  12. Base(int iPoids = 0) {_Poids = iPoids;};
  13.     ~Base() {};
  14.     int GetPoids() {return _Poids;};
  15. void SetPoids(int iPoids) {_Poids = iPoids;};
  16. private:
  17. int _Poids;
  18. };
  19. // Classe "Base" Python
  20. BOOST_PYTHON_MODULE(DIP)
  21. {
  22.    class_<Base>("Base", init<int>())
  23.         .def("GetPoids", &Base::GetPoids)
  24.  .def("SetPoids", &Base::SetPoids)
  25.     ;
  26. }
  27. string *readPythonScript( string fileName ); // fonction implémentée et qui marche, non explicité ici
  28. //-----------------------------------------------------------------------------
  29. // Name: main()
  30. // Desc: Application's main entry point.
  31. //-----------------------------------------------------------------------------
  32. void main( void )
  33. {
  34. Base Agent; // j'aimerais passer Agent dans le script
  35. if( PyImport_AppendInittab( "DIP", initDIP ) == -1 )
  36.  throw runtime_error( "Failed to add \"DIP\" to the "
  37.                       "interpreter's built-in modules" );
  38. // Setup Python to be embedded...
  39. Py_Initialize();
  40. object main_module(( handle<>(borrowed(PyImport_AddModule("__main__" )))));
  41. object main_namespace = main_module.attr("__dict__" );
  42. string *pythonScript = readPythonScript( "test.py" );
  43. if( pythonScript != NULL )
  44. {
  45.  PyRun_String( pythonScript->c_str(), Py_file_input,
  46.       main_namespace.ptr(), main_namespace.ptr() );
  47. }
  48. delete pythonScript;
  49. Agent = extract<Base&>(main_namespace["Agent"]); //Récup de l'instance agent du script dans l'objet C++
  50. cout << "Agent: " << Agent.GetPoids() << endl;
  51. // Cleanup after Python...
  52. Py_Finalize();
  53. system("pause" );
  54. }


 
et le script

Code :
  1. from DIP import *
  2. //Agent = Base(10) il faudrait récupérer l'instance Agent du c++
  3. Agent.SetPoids(15)


 
Quelqu'un connaitrait-il le contraire de "extract" ? (genre intract ou  insert  :??: )
 
Pitié j'ai besoin d'aide  :pt1cable:  
 
Merci d'avance

mood
Publicité
Posté le 27-09-2005 à 18:48:23  profilanswer
 

n°1209612
Laurent187​5
Posté le 28-09-2005 à 11:21:02  profilanswer
 

Re-bonjour,
 
J'ai peut-être mal expliqué mon problème. Le voici reformulé:
 
Je cherche en fait a rendre un objet c++ (ici, l'instance Agent créée au début du main) visible par un sript python pour qu'il puisse être modifié dans le script (par la ligne "Agent.SetPoids(15)" ).
La récupération de l'objet modifié dans le script python est ensuite récupéré dans le programme c++ pour continuer le traitement.
Actuellement, la récupération d'un objet python dans le programme c++ est effective. Ce qui me pose un probleme est de rendre visible l'objet Agent du programme c++ au script python.
Je ne sais pas du tout comment faire.
 
Si quelqu'un peut m'aider, j'en serais reconnaissant.
 
Merci d'avance

n°1211554
hazar
J'passais dans le coin...
Posté le 30-09-2005 à 12:32:15  profilanswer
 

Regarde par la, ca devrait t'aider:
http://www.swig.org/

n°1211763
Laurent187​5
Posté le 30-09-2005 à 15:09:31  profilanswer
 

bonjour.
 
J'ai commencé de regarder swig, mais étant donné que j'utilise boost pour autre chose et que je souhaite garder une certaine unité dans mon code, j'aimerais savoir si quelqu'un a déjà scripté une partie de programme c++ en python à l'aide de la librairie boost. Si oui, un petit exemple serai le bienvenu.
Par contre, si tous le monde pense qu'il vaut mieux utiliser swig pour interfacer des scripts avec mon programme c++, je suis prêt à l'utiliser.
 
Merci pour les conseils que vous voudrez bien me donner.

n°1212048
++fab
victime du syndrome IH
Posté le 30-09-2005 à 18:35:47  profilanswer
 

Si la documentation en ligne et la FAQ de boost.Python ne répondent pas à cette question,  
peut-etre pourrais-tu poser ta question sur la mailing list utilisateur de boost python ?
Apparemment, la liste python c++-sig semble approprié (anglophone).
 
http://www.boost.org/more/mailing_lists.htm#users
 
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [c++/Python] Passer une instance c++ à un script python

 

Sujets relatifs
[Question] - Comment lancer un script perl en tache de fondProbleme avec script de récupération de flux RSS
changement de nom de domaine et mon script marche plus..script de telechargement
Un script pour logger toutes les connexions sur mon site[python, regexp] un truc bete
Utiliser un logiciel grâce à Python[resolu] passer un mot écrit en hébreu via méthode GET
Script lie au journal d'evenement HELP !!!script PHP style explorateur windows
Plus de sujets relatifs à : [c++/Python] Passer une instance c++ à un script python


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR