Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Invité régulier
    Profil pro Léo
    Inscrit en
    janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Nom : Léo

    Informations forums :
    Inscription : janvier 2011
    Messages : 12
    Points : 6
    Points
    6

    Par défaut console interactive python dans C++ (sans surcouches type SWIG/PythonQt/Boost etc.)

    Bonjour,
    j'aimerais embarquer python pour permettre aux utilisateur de créer des script pour mon application (avec Qt). mon but est de faire une fenêtre qui réagisse un peu comme une console avec interpréteur interactif python, je voudrais réaliser cela uniquement avec l'API python/C sans utiliser de sur-couches (histoire de voir comment ça marche).
    J'ai essayé plusieurs trucs, mais avec des résultat pas trop convaincant.
    par exemple avec PyRun_InteractiveLoop, mais impossible de changer les entrées sortie pour les renvoyer vers le code C++...
    j'ai aussi essayé d'autres trucs mais avec encore moins de succès^^
    J'ai de bonne compétences en C/C++, mais j'aimerais avoir quelque pistes pour savoir quelles fonctions de l'API C de python sont à utiliser pour faire ça...


    Merci d'avance!

  2. #2
    Membre confirmé
    Homme Profil pro Christian Havard
    Développeur informatique
    Inscrit en
    mai 2011
    Messages
    145
    Détails du profil
    Informations personnelles :
    Nom : Homme Christian Havard
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2011
    Messages : 145
    Points : 213
    Points
    213

    Par défaut

    Bonjour,


    Avec un peu de code, il serait plus facile de voir ce que tu veux faire.

    Mais connaissances en C/C++ sont assez limitées (20 ans que je n'ai plus fait
    de C ). En revanche je connais assez bien python.

    Évidemment, pour moi la meilleure solution est de passer par Qt.

    Sinon, a-tu essayé de d'assigner sys.stdout et sys.stderr de python ?

    Petit conseil : si tu veux vraiment te lancer dans ce genre d'aventure, tu as intérêt à connaitre un peu mieux python. En tout cas, maîtriser l'interface c/c++.

    A bientôt

  3. #3
    Invité régulier
    Profil pro Léo
    Inscrit en
    janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Nom : Léo

    Informations forums :
    Inscription : janvier 2011
    Messages : 12
    Points : 6
    Points
    6

    Par défaut

    Je te remercie (ça fait plaisir de voir qu'on est pas seul au monde^^)

    Sinon, a-tu essayé de d'assigner sys.stdout et sys.stderr de python ?
    ...Je viens de trouver mon probleme pour cette partie, merci de la confirmation que c'est bien ainsi qu'il faut procèder^^

    ...Maintenant, quand j'exécute:
    PyRun_InteractiveLoop(stdin, "<stdin>");
    (code que j'ai pu trouvé à pas mal d'endroit), l'interpréteur n'utilise pas ma fonction write() pour écrire les ">>>" ou "..." est-ce normale?
    (alors que pour les print(...) ou les message d'erreur, il l'utilise)

    autre question, que représente le FILE* passé en parramètre?
    (si je remplace stdin par stdout, ça continue de marcher)
    et enfin, est-il possible d'utiliser un FILE* créé soi-même pour l'input, si oui, comment?

    merci d'avance!

  4. #4
    Invité régulier
    Profil pro Léo
    Inscrit en
    janvier 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Nom : Léo

    Informations forums :
    Inscription : janvier 2011
    Messages : 12
    Points : 6
    Points
    6

    Par défaut

    entre temps, j'ai aussi réussi à remplacer sys.stdin par un objet perso qui me permet d'utiliser ma propre fonction d'input (qui n'est certe rien d'autre que le dangereux scanf pour le moment, histoire de faire des tests)

    ...Maintenant, j'aimerais savoir comment faire en sorte que ce soit ma fonction qui soit utiliser par PyRun_InteractiveLoop?

    merci d'avance!

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •