je me mets au Python sur un cas concret : rechercher un joueur sur les
serveurs en ligne du jeux Ennemy Territory.
J'ai déjà gribouillé un ou deux scripts crades qui me permettent de lister
les serveurs sur le serveur maître, puis de lister les joueurs sur chacun
des serveurs.
Là j'essaie de faire un truc beau et propre avec sockets asynchrones grâce à
la bibliothèque Twisted.
Mais je bute sur un problème de syntaxe dans une classe. Voici mon code :
,----[ twist_master.py ]
| #!/usr/bin/python
| # -*- coding: iso-8859-1 -*-
|
| from twisted.internet import reactor
| from twisted.internet.protocol import DatagramProtocol
|
| master_server_port = 27950
| master_server_url = 'etmaster.idsoftware.com'
| master_query = 'ÿÿÿÿgetservers 83 full' # ÿ = \377
| master_response = 'ÿÿÿÿgetserverResponse'
|
| class MasterServerUDP(DatagramProtocol):
|
| def startProtocol(self):
| address = reactor.resolve(master_server_url)#.result
| d = self.transport.connect(address , master_server_port)
| d.addCallback(self._cbConnected)
|
| def _cbConnected(self, (host, port)):
| print "Connecté à %s" % str((host, port))
| self.transport.write(master_query)
|
| def datagramReceived(self, data, (host, port)):
| print "received %r from %s:%d" % (data, host, port)
|
| reactor.listenUDP(0, MasterServerUDP())
| reactor.run()
`----
Et l'interpréteur bloque là :
,----[ python ~/Projets/python/twist_master.py ]
| File "/Users/seki/Projets/python/twist_master.py", line 24
| print "received %r from %s:%d" % (data, host, port)
| ^
| IndentationError: expected an indented block
`----
Ce qui m'échappe c'est que l'instruction est déjà indentée ??? J'ai comparé
avec d'autres déclarations de classe, je ne vois pas le problème.
Question subsidiaire : comment je pourrais filtrer dans une chaîne les
couples ^+char pour les ignorer ?
Tu as mélangé les tabs et les espaces. C'est très très mal, tu as un blâme !
Bien vu ! Je crois que je ne l'aurais jamais trouvé.
Pourtant j'utilise le mode python d'Emacs pour indenter. Quoique ce bout a dû être copié-scotché depuis le navigateur internet.
Bon, je n'ai plus qu'à trouver comment afficher les caractères invisibles pour ne plus me faire avoir...
Merci beaucoup.
Sébastien Kirche
Sebastien Kirche
Le 6 oct 2004, Roger That a dit :
Question subsidiaire : comment je pourrais filtrer dans une chaîne les couples ^+char pour les ignorer ? ex: "une^1chaine^7comme^fca" => "unechainecommeca" Y aurait-il un moyen élégant autre qu'en bouclant sur la chaîne avec la méthode index ?
Un truc comme:
import re
exprt = re.compile(r"^.")
"".join(expr.split("12^345^6789"))
(bof pour les perfs j'imagine)
Boah, je ne recherche pas de perfs (pour le moment). C'est pas mal comme idée, utiliser une expression rationnelle.
Merci pour le truc.
Sébastien Kirche
Le 6 oct 2004, Roger That a dit :
Question subsidiaire : comment je pourrais filtrer dans une chaîne les
couples ^+char pour les ignorer ? ex: "une^1chaine^7comme^fca" =>
"unechainecommeca" Y aurait-il un moyen élégant autre qu'en bouclant sur
la chaîne avec la méthode index ?
Un truc comme:
import re
exprt = re.compile(r"^.")
"".join(expr.split("12^345^6789"))
(bof pour les perfs j'imagine)
Boah, je ne recherche pas de perfs (pour le moment).
C'est pas mal comme idée, utiliser une expression rationnelle.
Question subsidiaire : comment je pourrais filtrer dans une chaîne les couples ^+char pour les ignorer ? ex: "une^1chaine^7comme^fca" => "unechainecommeca" Y aurait-il un moyen élégant autre qu'en bouclant sur la chaîne avec la méthode index ?
Un truc comme:
import re
exprt = re.compile(r"^.")
"".join(expr.split("12^345^6789"))
(bof pour les perfs j'imagine)
Boah, je ne recherche pas de perfs (pour le moment). C'est pas mal comme idée, utiliser une expression rationnelle.
Merci pour le truc.
Sébastien Kirche
richard
Sebastien Kirche wrote:
Question subsidiaire : comment je pourrais filtrer dans une chaîne les couples ^+char pour les ignorer ?