1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| def execute(self, cmd, params = {}, flags = None):
data = []
commandLine = cmd
endCommandLine = self.__toBytes("\n\r")
# Traitement des paramètres reçus
for key in params:
commandLine += " " + key + "=" + self.encode(params[key])
# Si on a des flags on les ajoutes
if flags is not None:
commandLine += " "+ flags
# Ajout de la fin de la commande
commandLine += "\n\r"
# On envoie la commande Telnet convertie en byte
self.__telnet.write(self.__toBytes(commandLine))
# On récupère le résultat et on le converti en string
response = self.__toString(self.__telnet.read_until(endCommandLine, self.__timeout))
# On cherche le message d'erreur
error = re.match("error id=([\d]+) msg=([\w ]+)", response)
# Si on a pas de messa ge d'erreur c'est qu'on a des données à traiter
if error is None:
#### Définition de response pour divers tests, le script fonctionne nickel avec mais pas avec le retour telnet :/
#response = "clid=1 cid=110 client_database_id=12 client_nickname=cham client_type=0|clid=2 cid=6 client_database_id=1634 client_nickname=pierrenfeu client_type=0|clid=3 cid=6 client_database_id=1349 client_nickname=Taipan client_type=0|clid=4 cid=6 client_database_id=1706 client_nickname=torpille client_type=0|clid=7 cid=5 client_database_id=1143 client_nickname=Rivz\s-\sBokassa client_type=0"
# On créé le dictionnaire et on l'ajoute à data
data.append([dict(item.split("=") for item in ss.split()) for ss in response.split('|')])
# On récupère la seconde réponse qui contiens forcément le message d'erreur
response = self.__toString(self.__telnet.read_until(endCommandLine, self.__timeout))
# On match le message d'erreur
error = re.match("error id=([\d]+) msg=([\w ]+)", response)
# Debug: affichage des groups matchés
print(error.groups())
# On retourne les données
return data
def __toString(self, data = None):
if data is not None:
return str(data, encoding='UTF-8')
def __toBytes(self, data = None):
if data is not None:
return bytes(data, encoding='ascii') |
Partager