[python]recuperer une valeur de __init__
tsic
-
tsic -
tsic -
ce n'étais pas clair le code. Donc voilà:
comment récuperer la liste l????
remarque :
1)benj est un fichier txt de la forme:
bb#jj
oo#ll
2)la liste normalement recupere les donnees et devient:
[bb,jj,oo,ll]
Quand le client se connecte il envoie une commande existante dans la liste et le serveur lui envoie la reponse située à la case suivante de la case du cmd.
from socket import * import socket, sys, threading import SocketServer import time import locale class GestionnaireEcho(SocketServer.BaseRequestHandler): def __init__(self): SocketServer.BaseRequestHandler.__init__(self) self.l = [] for ligne in open('benj.txt'): for commande in ligne.split('#'): self.l.append(commande.strip()) print self.l def handle(self): print "la liste est:" print self.l locale.setlocale(locale.LC_ALL,'') c= time.strftime('%A %c') print "Connexion de ", self.client_address,c while True: donneesRecues = self.request.recv(8192) t=time.strftime("%H:%M:%S") print "\n C ",t, "> ", donneesRecues dr=str(donneesRecues) try: ind=self.l.index(dr) print ind msg= str(self.l[ind+1]) except: msg="commande erronee" self.request.send(msg) print "Deconnexion de ", self.client_address mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: serveur = SocketServer.ThreadingTCPServer(('127.0.0.1',84), GestionnaireEcho) except socket.error: print "La liaison du socket a l'adresse choisie a echoue." sys.exit() print "En attente..!!!!" serveur.serve_forever()
comment récuperer la liste l????
remarque :
1)benj est un fichier txt de la forme:
bb#jj
oo#ll
2)la liste normalement recupere les donnees et devient:
[bb,jj,oo,ll]
Quand le client se connecte il envoie une commande existante dans la liste et le serveur lui envoie la reponse située à la case suivante de la case du cmd.
A voir également:
- [python]recuperer une valeur de __init__
- Recuperer message whatsapp supprimé - Guide
- Comment recuperer une video sur youtube - Guide
- Citizen code python avis - Accueil - Outils
- Impossible de récupérer mon compte gmail - Guide
- Récupérer mon compte facebook désactivé - Guide
3 réponses
C'est normal: Un objet qui dérive de BaseRequestHandler doit prendre en entrée les paramètres suivants: (self, request, client_address, server)
Modifie la méthode __init__ de ta classe GestionnaireEcho.
Modifie la méthode __init__ de ta classe GestionnaireEcho.
Désolée,
Je vous jure qu j'ai essayé tout MAIS çA PAS MARCHE!!!!
Peut etre parce que je suis débutante en python. voilà le code du serveur modifié:
code du client que j'utilise:
Le message d'erreur est eliminer mais la boucle infinie reste.
bien que ça a marché en shell python
je crois que l'erreur est dans donneesReçues
Please please essayez d'executer le code et voyer vous meme
Je n'est plus d'idees à faire pour le corriger.
SVP
Merci
Je vous jure qu j'ai essayé tout MAIS çA PAS MARCHE!!!!
Peut etre parce que je suis débutante en python. voilà le code du serveur modifié:
from socket import * import socket, sys, threading import SocketServer import time import locale class GestionnaireEcho(SocketServer.BaseRequestHandler): def __init__ (self, request, client_address, server): self.l = [] for ligne in open('benj.txt'): for commande in ligne.split('#'): self.l.append(commande.strip()) print self.l def handle(self, request, client_address, server): print "la liste est:" print self.l locale.setlocale(locale.LC_ALL,'') c= time.strftime('%A %c') print "Connexion de ", self.client_address,c while True: donneesRecues = self.request.recv(8192) t=time.strftime("%H:%M:%S") print "\n C ",t, "> ", donneesRecues dr=str(donneesRecues) try: ind=self.l.index(dr) print ind msg= str(self.l[ind+1]) except: msg="commande erronee" self.request.send(msg) print "Deconnexion de ", self.client_address mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: serveur = SocketServer.ThreadingTCPServer(('127.0.0.1',84), GestionnaireEcho) except socket.error: print "La liaison du socket a l'adresse choisie a echoue." sys.exit() print "En attente..!!!!" serveur.serve_forever()
code du client que j'utilise:
# Definition d"un client reseau gerant en parallele l'emission # et la reception des messages (utilisation de 2 THREADS). host = '127.0.0.1' port = 84 import socket, sys, threading class ThreadReception(threading.Thread): """objet thread gerant la reception des messages""" def __init__(self, conn): threading.Thread.__init__(self) self.connexion = conn # ref. du socket de connexion def run(self): while 1: message_recu = self.connexion.recv(1024) print "Ser>" + message_recu # Le thread <reception> se termine ici. # On force la fermeture du thread <emission> : print "Client arrete. Connexion interrompue." self.connexion.close() class ThreadEmission(threading.Thread): """objet thread gerant l'emission des messages""" def __init__(self, conn): threading.Thread.__init__(self) self.connexion = conn # ref. du socket de connexion def run(self): message_final="" while 1: message_final="" message_emis = raw_input() message_final = message_final + " \n "+ message_emis self.connexion.send(message_final) # Programme principal - etablissement de la connexion : connexion = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: connexion.connect((host, port)) except socket.error: print "La connexion a echoue." sys.exit() print "Connexion etablie avec le serveur." # Dialogue avec le serveur : on lance deux threads pour gerer # independamment l'emission et la reception des messages : th_E = ThreadEmission(connexion) th_R = ThreadReception(connexion) th_E.start() th_R.start()
Le message d'erreur est eliminer mais la boucle infinie reste.
bien que ça a marché en shell python
je crois que l'erreur est dans donneesReçues
Please please essayez d'executer le code et voyer vous meme
Je n'est plus d'idees à faire pour le corriger.
SVP
Merci
Désolé je n'ai pas le temps de regarder.
Reprend les exemples de BaseRequestHandler qu'on trouve sur internet, et comme client utilise Putty en mode RAW.
Reprend les exemples de BaseRequestHandler qu'on trouve sur internet, et comme client utilise Putty en mode RAW.
ok
J'ai testé tout les cmd ça a marché sauf:
ind=self.l.index(dr)
le probleme est dans cette ligne.
je ne comprend pas pourquoi? Je l'ai changé par une chaine existantedans le fichier.tst et ça marché et j'ai vérifier le type du contenu de la liste c'est str et celle du dr sont str.
Liste.index(x)normalement ça marche. Ou est ce qu'i ya des cas où elle ne marche pas sinon est ce qu'il y a une autre methode simple pour faire la recherche de données dans une liste.
Désolée de vous déranger sebsauvage...
J'ai testé tout les cmd ça a marché sauf:
ind=self.l.index(dr)
le probleme est dans cette ligne.
je ne comprend pas pourquoi? Je l'ai changé par une chaine existantedans le fichier.tst et ça marché et j'ai vérifier le type du contenu de la liste c'est str et celle du dr sont str.
Liste.index(x)normalement ça marche. Ou est ce qu'i ya des cas où elle ne marche pas sinon est ce qu'il y a une autre methode simple pour faire la recherche de données dans une liste.
Désolée de vous déranger sebsauvage...
Le probleme persiste encore dans la ligne
ind=self.l.index(donneesRecues)
Comme si cette ligne fait une exception.
Alors quand je la remplace par une chaine qui existe dans le fichier: ind=self.l.index("jiji") ça marche normalement comme prévu
NB:donneesRecues ce sont les donnees envoyées par le client et dont le serveur doit tester pour donner une reponse appropriée située dans la liste dans la case qui suit la case de la cmd.
J'ai changé le code de recherche comme suit mais rien n'a changé
ind=self.l.index(donneesRecues)
Comme si cette ligne fait une exception.
Alors quand je la remplace par une chaine qui existe dans le fichier: ind=self.l.index("jiji") ça marche normalement comme prévu
NB:donneesRecues ce sont les donnees envoyées par le client et dont le serveur doit tester pour donner une reponse appropriée située dans la liste dans la case qui suit la case de la cmd.
J'ai changé le code de recherche comme suit mais rien n'a changé
ch="" dr="" for ch in self.l: if ch == donneesRecues : dr=self.l[self.l.index(ch)+1] print "dr est = %s"%(dr) if len(dr)==0: msg="commande erronee" else: msg=dr self.request.send(msg)
2) le probleme c'est dans le passage:
quelque soit la cmd que j'ecrit il me renvoie commande erronée donc il n'accede jamais à try----> ce qui est l'important dans mon pfe
Merci
Non ça veut dire que l'une des trois lignes comprises entre le try et le except plante.
Retire ton try/execpt pour voir l'erreur.
Je suis prêt à parier que c'est une erreur d'indexe dans ton tableau self.l
2)j'ai changé le code et tjs la meme chose le client entre dans une boucle infini et le serveur me reclame l'erreur suivante que je n'est pas compris:
3) Si vous avez une autre solution à mon sujet j'accepterai parce que j'etouffe. j'ai passé 3 jours sur ceci.
Merci