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

Python Discussion :

passage de données entre scripts python


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Points : 59
    Points
    59
    Par défaut passage de données entre scripts python
    Bonjour, j'ai une petite question concernant les possibilités de passage de données d'un script python appelé au script appelant

    Je souhaite développer une interface pour un projet de borne d'arcade, communément appelé un Frontend. Je suis sous Python 3.3 et j'utilise PySide ainsi que Python-SFML ( http://python-sfml.org/ qui est, pour ceux qui ne connaissent pas, un portage Python d'une librairie graphique originellement conçue pour C++, que je trouve plus agréable à utiliser que Pygame )

    PySide ( donc QT4 ) me sert pour le script de configuration mais ne gère pas les joystick. Et en plus je n'ai pas réussit à associer les deux dans une même fenêtre. Donc pour configurer les joysticks un script sous PySFML demande " incliner le joystick en haut, puis en bas etc ... et enregistre chaque position et id du joystick ainsi que les boutons.

    Bref quel serait la meilleur solution pour que les données captées par mon script en PySFML soit lue par le script parent utilisant PySide ?

    Import ou Exec ? je n'ai pas trouvé comment récupérer les données avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        def execPythonFile(self) :  
     
            with open('config_joystick.py') as fichier_pyhton :
                code = compile(fichier_pyhton.read(), 'config_joystick.py', 'exec')
                exec(code)
    Ou sinon avec Pickler ou un module de gestion des fichiers ini, le script en PySFML écrit un fichier avec les données et le script parent les récupère mais j'ai un peu peur que celui ci essai de lire un fichier qui n'est pas encore écrit


    Comment feriez vous à ma place ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,
    Citation Envoyé par davs34 Voir le message
    Bref quel serait la meilleur solution pour que les données captées par mon script en PySFML soit lue par le script parent utilisant PySide ?
    ....
    Comment feriez vous à ma place ?
    Un script = un programme = un processus.
    Pour échanger des informations entre processus, vous avez tous les mécanisme dits IPC à votre disposition.
    Les fichiers disques sont un mécanisme parmi d'autres pour échanger des informations (i.e. des données structurées).

    Citation Envoyé par davs34 Voir le message
    Import ou Exec ? je n'ai pas trouvé comment récupérer les données avec :
    Ni l'un ni l'autre! Même si avec Python, le code est dans des fichiers texte, échanger des données sous la forme de scripts Python suppose une structure de dicts et de listes avec des types plus ou moins simples. Le module JSON est suffisant pour lire/écrire ce genre d'informations. pickle ou les fichiers .ini peuvent aussi convenir. JSON risque d'être plus souple.

    ... le script parent les récupère mais j'ai un peu peur que celui ci essai de lire un fichier qui n'est pas encore écrit
    Ordonnancer une séquence d'activités sous forme de processus demande un outillage plus complexe que lorsqu'elles sont sous la forme de fonctions (dans un même processus).

    Citation Envoyé par davs34 Voir le message
    PySide ( donc QT4 ) me sert pour le script de configuration mais ne gère pas les joystick. Et en plus je n'ai pas réussit à associer les deux dans une même fenêtre. Donc pour configurer les joysticks un script sous PySFML demande " incliner le joystick en haut, puis en bas etc ... et enregistre chaque position et id du joystick ainsi que les boutons
    Je ne sais pas ce que vous entendez par "associer les deux dans une même fenêtre". Une fenêtre sera éventuellement gérée par SFML, une autre par Qt4. La question pourrait être de faire cohabiter les deux dans un même programme = processus. Et donc de définir une interface qui soit un peu plus "souple" qu'avoir 2 processus qui échangent des fichiers.
    A vous de préciser ce que vous voulez faire.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Points : 59
    Points
    59
    Par défaut
    Bonjour et merci pour ta réponse

    J'ai tardé à revenir, je pensai m'être abonné à mon sujet et donc je pensai que personne n'y avait prêté attention



    Citation Envoyé par wiztricks Voir le message
    Les fichiers disques sont un mécanisme parmi d'autres pour échanger des informations
    Écrire un fichier, et donc faire exécuter tout un processus complexe pour mon pc, je trouve cela un peu trop, juste pour passer un un bool ou un int et récupérer un résultat.

    Mais je me suis peut être mal exprimé dans mon premier message



    Citation Envoyé par wiztricks Voir le message
    Ni l'un ni l'autre! Même si avec Python, le code est dans des fichiers texte, échanger des données sous la forme de scripts Python suppose une structure de dicts et de listes avec des types plus ou moins simples. Le module JSON est suffisant pour lire/écrire ce genre d'informations. pickle ou les fichiers .ini peuvent aussi convenir. JSON risque d'être plus souple.
    Je jetterai un coup d’œil a JSON, j'utilise déjà Pickle dans mon programme pour sauvegarder la configuration, mais dans le probleme que j'expose dans ce sujet, j'aimerai une solution plus direct que de passer par l’écriture d'un fichier


    Citation Envoyé par wiztricks Voir le message
    Ordonnancer une séquence d'activités sous forme de processus demande un outillage plus complexe que lorsqu'elles sont sous la forme de fonctions (dans un même processus).
    Tu sais quand je vois ce genre de phrase ou je comprend qu'un mot sur deux, je me dit que j'ai pas encore le niveau pour discuter sur les forums Je me la met de coté j'y reviendrais avec plus d’expérience



    Citation Envoyé par wiztricks Voir le message
    Je ne sais pas ce que vous entendez par "associer les deux dans une même fenêtre". Une fenêtre sera éventuellement gérée par SFML, une autre par Qt4. La question pourrait être de faire cohabiter les deux dans un même programme = processus. Et donc de définir une interface qui soit un peu plus "souple" qu'avoir 2 processus qui échangent des fichiers.
    A vous de préciser ce que vous voulez faire.
    Oui c'est exactement ça j'aimerai du SFML dans un onglet de la fenêtre QT par exemple. Apparemment c'est compliqué, et je bloque sur ce que python appel des "objets cellules". cela dit j'ai fait en sorte que la fenetre sfml recouvre 100% de la fenêtre QT et du coup cela ne se vois pas du tout


    Bref j’essaie de mieux exposer ma requête :





    Dans cette fenêtre QT j'ai un bouton qui exécute un fichier config_joystick.py grâce à cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def execPythonFile(self) :  
     
            with open('config_joystick.py') as fichier_pyhton :
                code = compile(fichier_pyhton.read(), 'config_joystick.py', 'exec')
                exec(code,self.joy_config_script)




    la fenêtre Sfml recouvre la fenêtre QT et tout ce qui se passe dans ce script est récupéré par le premier script ( la fenêtre QT ) via le Dict : self.joy_config_script spécifié comme arguments dans la commande exec à la dernière ligne de ma fonction

    Donc récupérer les données ( sans ecrire de fichier sur le disque ) c'est bon, ça fonctionne. Même si ça me parait un peu barbare surtout quand je fais un print(self.joy_config_script). Mais passer des données au script créant la fenêtre sfml, la je bloque.

    Je viens de voir, sur un sujet ou tu as participé, qu'il serait possible d'importer mon script comme un " module " via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    import config_joystick
    Comme ça pas besoin de transmission de donnés puisque tout serait dans le même "processus" mais est ce la meilleur solution dans ce probleme ? un bouton QT qui ferai un import ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Quand est construit (et par quoi) le fichier "config_joystick.py" n'est pas très clair (ce qu'il y a dedans non plus).
    De plus, vu la complexité du code que vous montrez, je ne suis pas sur de comprendre vos questions.

    Désolé
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Points : 59
    Points
    59
    Par défaut
    Désolé je pensai que c’était une question toute bête pourtant une question de débutant. Je pense que j'ai pas les bon mots pour poser les questions, j'ai appris python tout seul et je trifouille QT depuis quelques jours seulement.

    Ça n'arrive jamais qu'on appel un script python via un autre script python ?

    Je sais qu'il existe subprocess.Popen pour des fichiers externes, je l'utilise pour charger des exécutables ".exe"

    Pour exécuter un fichier python en lui passant des argument il existe sous python2 la commande execfile("script2.py 1") mais n'existe plus pour python 3 et donc maintenant il fallait utiliser plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            with open('mon_fichier.py') as fichier :
                code = compile(fichier.read(), 'mon_fichier.py', 'exec')
                exec(code, variable_global, variable_local)
    Code qui fonctionne très bien, qui me permet de récupérer toutes les variables/tuples/dict ... du fichier python exécuté mais pas de lui en envoyer apparemment.

    Si il n'existe pas de solution, j'utiliserai : import mon_fichier comme tu le conseillais ici : http://www.developpez.net/forums/d11...n/#post6303148

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par davs34 Voir le message
    Ça n'arrive jamais qu'on appel un script python via un autre script python ?

    Je sais qu'il existe subprocess.Popen pour des fichiers externes, je l'utilise pour charger des exécutables ".exe"
    "appeler" un script Python via un autre script Python pourrait passer par Popen et on se retrouve à communiquer entre 2 processus.

    Ecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
               code = compile(fichier.read(), 'mon_fichier.py', 'exec')
               exec(code, variable_global, variable_local)
    c'est comme faire un import.
    On a un seul interpréteur, un seul processus et la communication se fait via des appels de fonctions/méthodes.
    Et comme vous semblez maîtriser les "class", je ne vois pas ou est votre soucis.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 46
    Points : 59
    Points
    59
    Par défaut
    comme un import ? alors je n'ai pas compris comment exec fonctionne

    Si je fais :

    import mon_fichier

    je peux appeler une fonction du script comme ceci :

    mon_fichier.mafonction()

    mais avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
               code = compile(fichier.read(), 'mon_fichier.py', 'exec')
               exec(code, variable_global, variable_local)
    Je peux rien appeler de ce script, si ? j’essaie de faire quelques test, rien ne passe

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Jouez un peu avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> data='''def foo(): print('foo')'''
    >>> code = compile(data, 'toto', 'exec')
    >>> globals = dict()
    >>> exec(code, globals, globals)
    >>> globals['foo']()
    foo
    >>>
    Mais la question n'est pas d'exécuter "mon_fichier.py" mais de comprendre le (votre) besoin de l'écrire.
    Ca se passe dans le même programme: stocker des données dans une structure Python et de lancer un code qui s'appuie dessus serait "plus normal".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. passage de donnée entre form
    Par Albert_le_5_eme dans le forum VC++ .NET
    Réponses: 8
    Dernier message: 24/11/2006, 10h30
  2. passage de données entre formulaires
    Par patbeautifulday1 dans le forum Access
    Réponses: 1
    Dernier message: 30/08/2006, 18h06
  3. Passage de variable entre scripts.
    Par Ambrym dans le forum Langage
    Réponses: 3
    Dernier message: 24/08/2006, 20h10
  4. passage de données entre page
    Par flatron dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/01/2006, 13h50
  5. Passage de données entre deux pages
    Par spica92 dans le forum ASP
    Réponses: 2
    Dernier message: 08/09/2005, 14h38

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