• # ça peut etre simple !

    Posté par (site web personnel, Mastodon) . En réponse au message Implementation d interpreteur python. É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.