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 :

Api python : charger un script python


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 30
    Points : 23
    Points
    23
    Par défaut Api python : charger un script python
    Bonjour, ça fait deux jours que je me débat avec l'api python pour essayer de charger un script python dans une application, ce script python utilisant des fonctions de l'application.

    J'en arrive à un code du genre :
    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
    37
    38
    39
    40
    #include <Python.h>
    void initPython();
     
    static PyObject *py_test(PyObject *, PyObject *);
     
    static PyMethodDef test_methods[] = {
        {(char*)"test", py_test, METH_VARARGS, (char*)"Methode de test"},
     
        {NULL, NULL, 0, NULL}
    };
     
    int value;
     
    int main(int argc, char **argv)
    {
        value = 0;
        printf("%i\n", value);
        initPython();
        PyRun_SimpleString((char*)"print \"Hello !\"");
        PyImport_AddModule((char*)"moduletest");
        Py_InitModule((char*)"moduletest", test_methods);
     
        PyRun_SimpleString((char*)"import moduletest");
        PyRun_SimpleString((char*)"moduletest.test");
     
     
        printf("%i\n", value);
        return EXIT_SUCCESS;
    }
     
    void initPython()
    {
        Py_Initialize();
    }
     
    PyObject *py_test(PyObject *self, PyObject *args)
    {
        value++;
        return Py_BuildValue("i", 1);
    }
    Le «print "Hello"» marche bien, par contre la valeur de value n'est pas changé, et aucun message d'erreur ou autre n'est affiché.
    J'ai un peu regardé le code de superkaramba pour voir comment faire (c'est pas mis dans le tutorial de python.org comment faire ça), mais je crois que j'ai tout bien fait ....

    Merci d'avance 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 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    À quoi servent tous ces casts en char* ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    A vrai dire je sais pas du tout, mais ils font comme ça dans superkaramba ...
    Enfin bon, avec où sans ça, ça change rien (mais j'avoue que c'est moche)

  4. #4
    Membre habitué Avatar de archer
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    338
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 338
    Points : 180
    Points
    180
    Par défaut
    est ce que la méthode que tu veux faire marche bien parce que d’habitude on importe des fonctions en C pour les utiliser sous python via SWIG mais je n’ai jamais entendu parler de l’inverse

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    "est ce que la méthode que tu veux faire marche bien parce que d’habitude on importe des fonctions en C pour les utiliser sous python via SWIG mais je n’ai jamais entendu parler de l’inverse "
    Si ma fonction marche ? Ben je vois pas pourquoi elle marcherait pas oO
    Sinon, j'ai testé swig aussi, c'est bien sympa mais ça ne permet pas de faire ce que je souhaite, à savoir pouvoir importer des scripts python, un peu comme on ferait avec lua

    Edit:c'est résolu, voilà comment faire pour lancer un fichier python :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     FILE* file = fopen(fichier, "r");
    PyRun_SimpleFile(file, fichier);
    Et avant ça, il faut initialiser le module, bêtement ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        PyObject *my_module = Py_InitModule("moduletest", spam_methods);
    PyImport_AddModule("moduletest");

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 18/04/2008, 20h07
  2. [Python API] Charger un script
    Par wetneb dans le forum C++
    Réponses: 9
    Dernier message: 24/09/2007, 18h22
  3. Accents Command Line depuis un script Python
    Par nicou50 dans le forum Général Python
    Réponses: 6
    Dernier message: 29/12/2006, 10h41
  4. Interpreter un script python dans un prog python
    Par romeo9423 dans le forum Général Python
    Réponses: 3
    Dernier message: 01/12/2005, 16h16
  5. Réponses: 3
    Dernier message: 05/04/2005, 14h26

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