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 :

C++ avec SWIG - afficher des messages d'erreurs


Sujet :

C++

  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 C++ avec SWIG - afficher des messages d'erreurs
    Bonjour à tous !


    J'ai un programme C++ et j'externalise une partie du code avec des scripts. Pour cela j'utilise le wrapper SWIG avec le langage Python.
    J'arrive à appeler des fonctions de mon script dans le programme C++ mais je n'ai aucun message en cas d'erreur dans une des fonction.

    si par exemple dans mon script j'ai une fonction toute simple "ajouter" qui prend un nombre et affiche ce nombre +5

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def ajouter(i):
        print i+5
    si je lance cette fonction avec Python Shell, et qu'en paramètre je met autre chose qu'un entier, par exemple un string, il m'affiche bien une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    >>> ajouter("ok")
     
    Traceback (most recent call last):
      File "<pyshell#7>", line 1, in <module>
        ajouter("ok")
      File "D:\Dev\lib\dtSwigPython\scriptSwig.py", line 6, in ajouter
        print i+5
    TypeError: cannot concatenate 'str' and 'int' objects

    Mais si j'appelle cette fonction dans mon programme C++, il ne m'affiche pas d'erreur, il se contente d'ignorer l'appel à la fonction.

    Je cherche donc un moyen de pouvoir débugger mon script python quand je le lance depuis le code C++.


    Pour info, voila comment j'appelle les fonctions du script dans le code C++ :
    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
     
     
        Py_Initialize();
     
        m_pyName = PyString_FromString("scriptSwig");
     
        m_pyModule = PyImport_Import(m_pyName);	// Load the module object
        if(m_pyModule == NULL) std::cout<< "ERROR import script" << std::endl;
     
        m_pyDict = PyModule_GetDict(m_pyModule);	// pDict is a borrowed reference
        if(m_pyDict == NULL) std::cout<< "ERROR Dico" << std::endl;
     
        m_pyFunc = PyDict_GetItemString(m_pyDict, fctName);	// pFunc is also a borrowed reference
        if(m_pyFunc == NULL) std::cout<< "ERROR function" << std::endl;
     
        if (PyCallable_Check(m_pyFunc)) 
    	{
    		PyObject_CallFunction(m_pyFunc, NULL); // lancement de la fonction contenu dans le script Python
    	}
    	else 
            PyErr_Print();
     
    // Clean up
        Py_DECREF(m_pyModule);
        Py_DECREF(m_pyName);
        Py_Finalize();
    Merci d'avance

  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
    J'ai finalement réussi à rediriger les messages d'erreur de Python dans mon programme C++

    aide sur http://stackoverflow.com/questions/4...dout-in-c-code

    Voici mon code C++ pour récupérer les messages d'erreur
    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
     
    std::string stdOutErr =
    "import sys\n\
    class CatchOutErr:\n\
    	def __init__(self):\n\
    		self.value = ''\n\
    	def write(self, txt):\n\
    		self.value += txt\n\
    catchOutErr = CatchOutErr()\n\
    sys.stdout = catchOutErr\n\
    sys.stderr = catchOutErr\n\
    "; //this is python code to redirect stdouts/stderr
     
        Py_Initialize();
        PyObject *pModule = PyImport_AddModule("__main__"); //create main module
        PyRun_SimpleString(stdOutErr.c_str()); //invoke code to redirect
        PyRun_SimpleString("print(1+1)"); //this is ok stdout
        PyRun_SimpleString("1+a"); //this creates an error
        PyObject *catcher = PyObject_GetAttrString(pModule,"catchOutErr"); //get our catchOutErr created above
        PyErr_Print(); //make python print any errors
     
        PyObject *output = PyObject_GetAttrString(catcher,"value"); //get the stdout and stderr from our catchOutErr object
     
        std::cout << "Here's the output: " << PyString_AsString(output) << std::endl; //it's not in our C++ portion
     
        Py_Finalize();

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/07/2010, 11h23
  2. [Toutes versions] afficher des messages d'erreurs si conditions sont fausses
    Par guigui71 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/05/2010, 16h03
  3. problème avec le fichier des messages d'erreurs
    Par s.mustapha86 dans le forum Struts 1
    Réponses: 4
    Dernier message: 15/07/2008, 15h37
  4. Affichage des message d'erreurs avec Struts
    Par stujava dans le forum Struts 1
    Réponses: 4
    Dernier message: 13/08/2007, 21h12
  5. des messages d'erreurs avec mon code
    Par ulysse031 dans le forum Langage
    Réponses: 15
    Dernier message: 25/05/2007, 18h14

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