URL: https://linuxfr.org/forums/programmation-python/posts/pexpect-retrouver-l%C3%A9l%C3%A9ment-attendu Title: pexpect, retrouver l'élément attendu Authors: Spack Date: 2010年07月16日T19:33:25+02:00 Tags: Score: 1 Bonjour, J'utilise pexpect afin d'interagir en fonction des retours par exemple pour une session SSH, Telnet, etc... J'ai une méthode qui exécute une commande et renvoi le résultat. def run(self, command): £spaces£ £/spaces£out = [] £spaces£ £/spaces£self.child.sendline(command) £spaces£ £/spaces£ret = self.child.expect(self.prompt) £spaces£ £/spaces£if ret == 0: £spaces£ £/spaces£for line in re.split('\n', self.child.before): £spaces£ £/spaces£re.sub('\s*$', '', line) £spaces£ £/spaces£out.append(line) £spaces£ £/spaces£out.pop(0) £spaces£ £/spaces£out.pop(len(out) - 1) £spaces£ £/spaces£return out Rien de bien extraordinaire, j'exécute le commande et après avoir nettoyé le résultat, je place chaque ligne dans une liste. Ce que je voudrais, c'est d'ajouter un paramètre où l'utilisateur (de la fonction) pourrait attendre autre chose que le prompt et spécifier l'action à effectuer. Par exemple si je doit lancer une commande qui attend une réponse, j'aurai un _timeout_ car pas de prompt. Le but du jeu étant donc d'avoir soit dans un dictionnaire ou dans une liste les étapes intermédiaires avant d'arriver au prompt. Et bien sûre, tout en sauvegardant le résultat au fur et à mesure. Première solution, l'usage d'un dictionnaire. Les clés serait ce que l'on attend et la valeur, la ligne à exécuter. Ma ligne : ret = self.child.expect(self.prompt) deviendrait alors : ret = self.child.expect([self.prompt, dict.keys()]) La fonction _expect_ renvoi un entier. Ce dernier correspond à l'indice de l'élément trouvé. Comment puis-je faire la relation entre indice et valeur de clé ? La deuxième solution serait d'utiliser une liste contenant des paires : [('attente1', 'envoi1'), ('attente2', 'envoi2'), ...] Mais là, pour extraire chaque attente il faudra faire une boucle. Ensuite la correspondance avec la valeur de retour est plus simple. envoi = liste[ret - 1][1] Qu'en pensez-vous ?

AltStyle によって変換されたページ (->オリジナル) /