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 :

fonction d'interfaçage avec liste comme argument


Sujet :

Interfaçage autre langage Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut fonction d'interfaçage avec liste comme argument
    Bonjour,

    je souhaiterais que ma fonction C reçoive une liste Python en argument lors de sont appelle.

    Le problème c'est que la taille de cette liste est variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    PyArg_ParseTuple( args, "(s)", &liste_de_mots  ) //Liste de un mot 
    PyArg_ParseTuple( args, "(ss)", &liste_de_mots  ) //Liste de deux mots
    Quelle chaine de formatage dois-je utiliser S.V.P ?

    Merci d'avance.
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  2. #2
    Membre chevronné
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PyObject *list;
    if(! (PyArg_ParseTuple(args, "o", &list) ) {
       return -1; // impossible de parser les arguments
    }
    if(! PyList_Check(list)) {
       return -2; // n'est pas une liste python ou un sous-type de liste python
    }

  3. #3
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    Bonjour,
    merci pour ta réponse mais elle me renvoie une erreur de segmentation...

    Pour le moment j'utilise ceci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        PyObject * liste_de_mots ;
        if( !PyArg_UnpackTuple( args, "create_tree", 1, 1, &liste_de_mots  ) )
            return NULL;
    j'espère qu'il existe la même fonction pour transmettre à python des dico de taille variable.
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  4. #4
    Membre chevronné
    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
    Par défaut
    Tu as un debugger pour le segfault ? (gdb pour ne pas le citer).

    Après pour faire une fonction C qui prend en argument une liste python, le prototype est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void myfunction(PyObject *list);
    Une liste python est de type PyObject * comme tout objet python. Un dictionnaire python est aussi de type PyObject *, une instance de classe PyObject * .

  5. #5
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    Une liste python est de type PyObject * comme tout objet python. Un dictionnaire python est aussi de type PyObject *, une instance de classe PyObject * .
    Merci beaucoup pour cette explication.

    j'ai trouvé pas mal de renseignements ici

    J'ai remarqué que la plupart des fonctions de l'api python prenait en argument un PyObject *.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int PyString_Size (PyObject *string)
    J'imagine alors qu'un PyStringObject est un PyObject avec une variable définit à
    String à l'intérieur.

    Pour le retour de ma fonction en C, j'ai le même problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return Py_BuildValue( "{ss}", key, value ) ;
    J'ai tester ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return Py_BuildValue( "o", mon_dico ) ;
    Mais j'ai cette erreur à l'appel de ma fonction :
    SystemError: bad format char passed to Py_BuildValue
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

  6. #6
    Membre chevronné
    Avatar de vincent.mbg
    Homme Profil pro
    Développeur Python
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Python

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    Désolé


    Py_BuildValue( "o", mon_dico ) ;

    Je viens de voir qu'il faut un O majuscule.

    Maintenant, ça me renvoie une erreur de segmentation.
    Mon guide pour apprendre Tkinter - N'oubliez pas de consulter les FAQ Python ou de visiter mon blog

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

Discussions similaires

  1. Fonction de calcul avec liste déroulante
    Par hotmos dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/04/2014, 14h16
  2. Macro Word depuis Excel avec tableau comme argument
    Par emorejbleu dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/07/2013, 14h45
  3. Réponses: 4
    Dernier message: 22/01/2013, 11h01
  4. appel d'une fonction avec pointeur comme argument
    Par airness86180 dans le forum Débuter
    Réponses: 1
    Dernier message: 06/03/2009, 13h34
  5. [VBA] fonction qui reçoit une variable comme arguments
    Par NiKoTiNe dans le forum VBA Access
    Réponses: 2
    Dernier message: 11/07/2007, 11h21

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