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 :

Communiquer entre fichiers


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Par défaut Communiquer entre fichiers
    Bonjour,

    J'ai fais un petit programme teste pour les thread. Ca marche sans soucis. Mais j'ai voulu faire le même programme sur 3 fichiers différents. A savoir 2 fichiers pour 2 thread et un fichier pour le lancement. Le problème que je trouve, et que quand on le lance, il ne trouve pas la valeur de x pour le thread "salut" pourtant alors que x est définie en "global" dans les 3 fichiers. Si quelqu'un a une idée, je suis preneur. Mes codes :


    Fichier "principal.py":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import threading
    from bonjour1 import *
    from salut import *
    global x
     
    t1=threading.Thread(target=bonjour)
    t1.start()
     
    t2=threading.Thread(target=salut)
    t2.start()

    Fichier "bonjour1.py":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import time
    from salut import *
    global x
    def bonjour():
        temps = 0.
        x=0.
        while (temps < 10.):
            time.sleep (1.5)
            x=x+1
            print "bonjour  x= " , x

    Fichier "salut.py":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import time
    from bonjour1 import *
    global x
    def salut():
        k = 0
        x=0.
        while (k <10.):
            print "salut  x= ",x
            time.sleep(1.)

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 139
    Par défaut
    Il me semble qu'une variable globale telle que tu l'a défini, est global pour l'ensemble des fonction dans le fichier.
    Donc ici tu ne défini jamais ta valeur x dans le fichier bonjour.

    tu devrait p'tet passer par des classe et utiliser une instance de classe. Ca te permettra de "partager" ta valeur

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 51
    Par défaut Ok
    Oui, c'est comme ça que je vais faire.Mais j'aurais pensé qu'il existe une méthode pour s'échanger des variables entre fichiers plus simplement. Enfin bon. Merci en tout cas pour le tuyaux.

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Le pb est: comment peut-on utiliser les objets python du 'main' dans un module importé. J'ai déjà rencontré ce pb que j'ai résolu comme suit:

    http://python.jpvweb.com/mesrecettes...amme_principal.

    En résumé, tu places au début des modules importés (et en retirant le 'global x'):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    from sys import modules
    progmain = modules['__main__']
    Après, la variable globale x du programme principal peut être atteinte à partir des modules importés par:

    On peut faire la même chose avec les fonctions et méthodes de classes, ce qui permet de mettre dans le programme principal les objets que plusieurs modules peuvent utiliser.

    Mais on pourrait aussi mettre ces objets généraux dans un autre module importé, ce qui permettrait d'éviter cette astuce!

    Tyrtamos

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/03/2006, 17h23
  2. Différence entre fichier.h et .lib
    Par beb30 dans le forum MFC
    Réponses: 5
    Dernier message: 24/03/2006, 20h36
  3. [VBA]Lien entre fichiers excel : Update en VBA
    Par criocaps dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/01/2006, 09h07
  4. Réponses: 4
    Dernier message: 23/11/2005, 14h25
  5. Communiquer entre plusieurs instances d'applications
    Par bourinator dans le forum C++Builder
    Réponses: 5
    Dernier message: 28/09/2003, 11h24

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