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 :

Executer un script Python depuis un code C++


Sujet :

C++

  1. #1
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut Executer un script Python depuis un code C++
    Bonjour,

    Je débute en programmation C++ et Python, je cherche un moyen d'exécuter un script Python depuis du code C++.

    Après de nombreuses recherches, je suis parvenu à installer et configurer Python25.

    Voici l'état actuel de mon code :

    Fichier cpp :
    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
     
     
    #include <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\"");
     
        // Execute le script
        PyRun_AnyFile(pyFile, "log.py");
     
        Py_Finalize();
     
        return 1;
    }
    log.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print "Log : Bonjour"
    La compilation marche, mais j'ai un plantage lors de l'execution. Ce plantage est provoqué par la ligne "PyRun_AnyFile(pyFile, "log.py");". Si celle ci est passée en commentaire, on s'apperçoit que la ligne "PyRun_SimpleString( "print \"Bonjour\"");" fonctionne bien. L'erreur ne semble donc pas venir de l'environnement Python.

    Aurais-je oublié certaines déclarations ou initialisations dans mon code C++? Est-ce que le script Python nécessite plus d'information pour fonctionner de cette manière?

    Merci pour votre aide =]

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Regarde peut-être ce qui est indiqué ici, après le "a small glitch" :
    http://lists.wxwidgets.org/archive/w.../msg22203.html

  3. #3
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Cette méthode marche bien pour lancer le script =)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    string exec ( "execfile(r\"" );  // note r for raw Python string.
    	    exec += "log.py" ; exec += "\")" ;
    	    PyRun_SimpleString( (char*) exec.c_str() );
    à la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PyRun_SimpleFile(pyFile, "log.py");
    Cependant, j'en viens à me demander si je pourrai ensuite passer des arguments à mon script via la méthode PySys_SetArgv(argc, argv) décrite dans l'API Python.

    J'aurai en effet besoin dans un futur assez proche de pouvoir transmettre des chaines de caractères à mon script.

    Je vais continuer avec cette piste pour le moment. En espérant que PySys_SetArgv(argc, argv) marche bien.

    Merci =)

  4. #4
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Ca avance bien.

    j'ai ajouté ceci après "Py_Initialize();" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int argc = 2; 
    	char* argv[2] = {"Argument1", "Argument2"};
     
    	PySys_SetArgv(argc, argv);
    et mon script python a été un peu modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    import sys
    print "Log : Bonjour"
     
    print sys.argv[0]
    print sys.argv[1]
    Les arguments passés au script sont bien récupéré et renvoyé par le script. La méthode ci-dessus pour lancer un script semble donc compatible avec mes attentes et reste multi-plateforme.

    Merci =)

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    71
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 71
    Points : 48
    Points
    48
    Par défaut
    Comment tu a fait pour installer et configurer Python25.

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

Discussions similaires

  1. [SQL] Executer un script SQL depuis php
    Par sly3333 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 07/12/2007, 01h33
  2. Executer un script SQl depuis VB
    Par Sytchev3 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 22/03/2007, 20h06
  3. [Système] Exécuter script python depuis php
    Par philpython dans le forum Langage
    Réponses: 1
    Dernier message: 22/03/2007, 13h57
  4. Execution d'un script shell depuis un code C
    Par aproust dans le forum C
    Réponses: 6
    Dernier message: 12/05/2006, 13h53
  5. Executer un script batch depuis un DTS package
    Par Nadaa dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 29/03/2006, 09h14

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