Bonjour,

j'ai un soucis avec une fonction en Python 3. Cette fonction envoie une requête telnet et interprète le ou les retours.

Je l'ai documenté donc vous devriez comprendre le principe assez facilement.

Code python : Sélectionner tout - Visualiser dans une fenêtre à part
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')

Le gros problème que j'ai avec cette fonction est que j'obtiens toujours cette erreur:
ValueError: dictionary update sequence element #0 has length 1; 2 is required
Je ne comprend pas où est mon erreur, je pense que ça viens du format ou charset utilisé pour mon résultat mais je ne trouve rien de probant sur le net

Merci pour le coup de pouce