Forum Programmation.python Implementation d interpreteur python

Posté par  .
Étiquettes : aucune
0
11
août
2005
Une question me trotte toujours en tête :
Comment implémenter un interpreteur python dans une application deja existante ( et non programmer en python ) ?
Pendant mes surfs , je trouves beaucoup de softs sympa , mais j aurais bien voulu y ajouter un script ou 2 , histoire de me faciliter la vie .
Mais voila il n'y a pas d interpréteur python dans le soft ...
Quelqu un a une idée ? une piste ?
  • # Beh

    Posté par  (site web personnel) . Évalué à 2.

    J'sais pas si c'est l'heure qui veut va, mais je n'ai rien capté de ce que tu veux faire...
  • # ça peut etre simple !

    Posté par  (site web personnel, Mastodon) . Évalué à 2.

    on peut faire une version (très) simplifiée de la chose comme ceci :

    soit le fichier source py.c suivant

    #include <stdio.h>
    #include <Python.h>

    int main(int argc, char ** argv) {

    FILE *fp;

    if (argc != 2) {
    printf("usage: %s script.py \n", argv[0]);
    return -1;
    }

    Py_Initialize ();
    if (Py_IsInitialized () == 0) {
    printf("echec lors de l'initalisation interpreteur python ! (exiting)\n");
    return -1;
    }

    if ((fp = fopen(argv[1], "r")) == NULL) {
    printf("echec lors de la lecture du script python %s ! (exiting)\n", argv[1]);
    return -1;
    }

    if (PyRun_SimpleFile (fp, argv[1]) != 0) {
    printf("echec lors de l'execution du script python! (exiting)\n");
    fclose (fp);
    return -1;
    }

    fclose (fp);

    Py_Finalize ();
    if (Py_IsInitialized () != 0) {
    printf("echec lors de fermeture de l'interpreteur python ! (exiting)\n");
    return -1;
    }

    return 0;
    }


    que l'on compile ainsi gcc -Wall py.c -o py -I/usr/include/python2.3 -lpython2.3 (à modifié selon la version de python installé)

    soit script le python suivant (test.py):

    #!/usr/bin/env python

    print "coucou de python"


    on utilise le tout ainsi :
    ./py.c test.py

    et le resultat est


    [manu@electron][23:12]
    [~]
    >./py test.py
    coucou de python
    [manu@electron][23:13]
    [~]
    >


    voilà, voilà c'est une version simplifiée de ce qu'on peut faire, pour des trucs plus avancées je te conseille de te reporter à l'API C de python qui est somme toute assez simple (à coté de la monstruosité de celle de Perl, mais ça n'engage que moi ;-) )

    M.
    • [^] # Re: ça peut etre simple !

      Posté par  (site web personnel) . Évalué à 0.

      un simple shell execute "python script.py" ?
      • [^] # Re: ça peut etre simple !

        Posté par  (site web personnel, Mastodon) . Évalué à 2.

        pas un shell, mais un programme en C avec l'interpreteur python embarqué !

        M.
        • [^] # un peu comme le VBA de m$ Office

          Posté par  (site web personnel) . Évalué à 0.

          Apres, pour que ce soit praticable, il faut que le programme soit conçu pour être scipté.

          Personnellement, je pense qu'une bonne solution est d'implementer le pattern Command (comme pour faire un undo, redo).

          En empilant tes commandes, puis en les traitant (avec une grammaire ?), tu peux même te faire un enregistreur de macro.
          • [^] # Re: un peu comme le VBA de m$ Office

            Posté par  (site web personnel, Mastodon) . Évalué à 2.

            Apres, pour que ce soit praticable, il faut que le programme soit conçu pour être sc[r]ipté

            c'est evident et c'est tout à fait faisable, mais j'ai juste donné un exemple simplifié (comme je l'ai précisé). Il faut que dans le programme C , il soit définit des bindings internes qui puissent etre utilisés dans le script python qui est interprété!

            pour les reste de ton commentaire, je comprends pas trop ce que tu veux dire (enfin si , mais je vois pas le rapport avec la question !)

            M.
  • # Boost.Python

    Posté par  (site web personnel) . Évalué à 1.

    Boost.Python permet de faire ça je crois :

    http://www.boost.org/libs/python/doc/index.html(...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.