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

Interfaçage autre langage Python Discussion :

appelle de python dans C


Sujet :

Interfaçage autre langage Python

  1. #1
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 91
    Points
    91
    Par défaut appelle de python dans C
    Bonjour.
    Voilà maintenant je cherche à appeler des variables créer dans python avec du C.(L'inverse de Swig en faite).
    J'ai utiliser pour comprendre le processus l'exemple donné par pfeuh dans un post intitule :
    Résolu] [SWIG] dialogue entre code C et code python
    dmichel (8ième en partant du bas du forum).

    j'ai juste remplace #include "D:\Python24\include\Python.h" par #include "D:\Python25\include\Python.h"

    Lorsque je compile en mode Deubug avec VS2008, j'ai le message d'erreur suivant : 1>LINK : fatal error LNK1104: impossible d'ouvrir le fichier 'python25_d.lib'

    Lorsque je compile en mode Release j'obtiens : 1>LINK : fatal error LNK1104: impossible d'ouvrir le fichier 'python25.lib'

    De plus je ne comprends pas dans son code en C, comment VS peux aller chercher le fichier python_sub.py (voir bas de page).
    L'invoquation de #include "D:\Python25\include\Python.h" suffit il pour connaitre l'acces au .py

    Mes recherches google sur le pb de 'python25_d.lib' me disent qu'il faut créer soit même en mode debud le .py. Je ne comprends pas la signification de cela.
    Auriez vous déjà eu le même problème?

    Merci.

    Le code est le suivant : test_python.c
    #include <stdio.h>
    #include "D:\Python25\include\Python.h"

    PyObject *mymod, *func, *pyparams, *retval;

    int CallPythonInc(int myint){
    int js;
    func = PyObject_GetAttrString(mymod, "PythonInc");
    pyparams = Py_BuildValue("(l)", myint);
    retval = PyEval_CallObject(func,pyparams);
    PyArg_Parse(retval, "I",&js);
    return js;
    }

    int CallPythonGet(void){
    int js;
    func = PyObject_GetAttrString(mymod, "PythonGet");
    retval = PyEval_CallObject(func,NULL);
    PyArg_Parse(retval, "l",&js);
    return js;
    }

    int main(void){
    int _result, _testvar = 1536;
    Py_Initialize();
    mymod = PyImport_ImportModule("python_sub");

    _result = CallPythonGet();
    printf ("Python global var:%u\n",_result);

    _result = CallPythonInc(_testvar);
    printf ("Initial value:%u Incremented value:%u\n",_testvar,_result);

    Py_Finalize();
    return 0;
    }

    Le code python : python_sub.py
    pythonvar = 123456789;

    def PythonInc(myint):
    return myint + 1

    def PythonGet():
    global pythonvar
    return pythonvar

  2. #2
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Pour python25.lib, tu regardes sur ton disque dans quel dossier il se trouve et tu le rajoutes dans les paramètres du link. (si mes souvenirs en C son encore valable :p) Chez moi, ce fichier est dans C:\Python25\libs.

    De plus je ne comprends pas dans son code en C, comment VS peux aller chercher le fichier python_sub.py (voir bas de page).
    L'invoquation de #include "D:\Python25\include\Python.h" suffit il pour connaitre l'acces au .py
    ça c'est la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mymod = PyImport_ImportModule("python_sub");
    qui le gère, à priori, et ceci par un import du module python, import équivalent à la commande import de python.

    Mes recherches google sur le pb de 'python25_d.lib' me disent qu'il faut créer soit même en mode debud le .py. Je ne comprends pas la signification de cela.
    Cela doit signifier qu'il faut que tu compiles python, à partir de ces sources donc, en mode debug, pour obtenir ce fichier. Le plus simple, pour le moment, me semble de rester en mode release.

    Ce ne sont que des pistes, vu que je n'ai pas encore fais de module en c s'interfaçant avec python, mais je ne dois pas être loin

    Par contre les problèmes de link et de .lib (librairie en C) sont des notions de base en C. Il serait peut être bon que tu suives un tuto concernant le C avant de t'aventurer plus loin au niveau de l'interopérabilité C <-> python.

    P.S. Juste pour info, on dis UN appel, c'est donc "appel de python dans C" et non "appelle de python dans C" .
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    #include "D:\Python25\include\Python.h" c'est vraiment très moche et pas du tout propre.

    Logiquement on fait un :
    #include <Python.h>

    et on ajoute un chemin de recherche des entêtes au compilateur (ici ce sera D:\Python25\include\ )

  4. #4
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 141
    Points : 91
    Points
    91
    Par défaut
    Merci DelphiManiac, tes souvenirs sont encore bons.
    Tu as raison tamiel, ce n'était pas vraiment propre, j'ai refais comme tu as dit.
    Tout fonctionne très correctement maintenant. J'ai d'ailleurs crée d'autres méthodes depuis. Merci donc à vous deux pour votre réactivité. L'opérabilité est quelque chose de très puissant.
    ++

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

Discussions similaires

  1. Appel d'un script Python dans C++
    Par Jiyuu dans le forum C++
    Réponses: 19
    Dernier message: 17/01/2014, 11h44
  2. Comment appeler une méthode python dans un xml?
    Par AmFaye2 dans le forum Odoo (ex-OpenERP)
    Réponses: 3
    Dernier message: 23/09/2013, 13h59
  3. [QtGui] Appeler du Python dans un lien hypertexte ?
    Par tyrtamos dans le forum PyQt
    Réponses: 4
    Dernier message: 07/09/2012, 09h05
  4. Réponses: 3
    Dernier message: 23/06/2004, 21h17
  5. Appel de procédure dans une page ASP
    Par PrinceMaster77 dans le forum ASP
    Réponses: 5
    Dernier message: 02/04/2004, 16h59

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