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

 C++ Discussion :

Exécuter un code python en C++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Par défaut Exécuter un code python en C++
    Bonjour a tous

    Bon je poste ici car je ne savais pas si il fallait mettre ce post dans le forum Python.

    Donc mon problème est que je cherche a utilisé Python au sein d'un code C++
    afin que l'utilisateur puisse écrire du code python au sein de mon application.

    Par exemple, si l'utilisateur rentre un code simple comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    varA="toi"
    varB=25
    if str(varB).isdigit() and varB>0:
    	str="Bonjour {0} tu as {1} ans".format(varA,varB)
    	print (str)
    	str=str.replace("Bonjour", "Hello")
    	str=str.replace("tu as", "you are")
    	str=str.replace("ans", "")
    	print(str)
     
    else:
    	print ("Error")
    Je voudrai récupérer la sortie ou si il y a une erreur de syntaxe, le traceback.

    Donc pour l'instant voici le code que j'ai produit:
    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
     
     
    #include "PyTrParser.h"
     
    PyTrParser::PyTrParser()
    {
    	Py_Initialize();
    	pyMainModule =PyImport_AddModule("__main__");
    	main_dict =PyModule_GetDict (pyMainModule);
    }
     
    PyTrParser::~PyTrParser()
    {
    	Py_Finalize();
    }
     
    PyObject* PyTrParser::execute(const char* code)
    {
    	return PyRun_String(code, 0, main_dict, main_dict);
    }
    le main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	PyTrParser *parser=new PyTrParser;
    	string code="2+3";
    	PyObject * returnObj=parser->execute(code.c_str());
     
    	int i=0;
    	delete returnObj;
    	delete parser;
    Mais celui-ci léve une exeception :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.AccessViolationException
    1. Savez-vous si je part dans la bonne direction ?
    2. Avez vous des bon tuto sur ce sujet ? (car la doc est un peux limite)
    3. Savez-vous d'où viens mon erreur et pourquoi ?

    Je vous remercie d'avance pour votre aide

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Par défaut
    Boost.python permet d'ecrire des fonctions en C++ et les appelé en python, c'est bien cela ?

    Moi c'est l'inverse que je veux faire.
    un utilisateur écrie du Python et mon code C++ fait l’exécution.

    EDIT: pour l'instant je peux executer du code si il fait une ligne, mais pas plus, donc pas de if, etc....
    une idée ?

  4. #4
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    Non, boost::python permet aussi d'appeler du code python depuis un program c++:
    http://www.boost.org/doc/libs/1_50_0...embedding.html

    Pour récupérer les messages d’erreurs venant de python, d’idée est de remplacer sys.stderr/sys.stdout par ton propre flux qui fait... ce que tu veux^^.
    Je l'ai déjà fait mais malheureusement je n'est pas le code sous la main.

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 389
    Par défaut
    Bon, après avoir discuté avec mon tuteur de stage, pas moyen d'utilisé Boost....

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonctionnement de l'exécution du code en Python
    Par cal23 dans le forum Général Python
    Réponses: 6
    Dernier message: 06/08/2014, 22h00
  2. Exécution de code python
    Par P.G dans le forum Général Python
    Réponses: 5
    Dernier message: 17/01/2014, 20h34
  3. Exécuter code python en PHP
    Par Pchom dans le forum Langage
    Réponses: 2
    Dernier message: 20/04/2013, 17h59
  4. Exécuter du code python dans un string (python -c cmd)
    Par piloupy dans le forum Général Python
    Réponses: 2
    Dernier message: 14/11/2010, 01h10
  5. Réponses: 7
    Dernier message: 03/02/2005, 17h20

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