2010-07-14 10 views
0

Est-il possible de simuler re.findall dans le module pexpect?Python: simuler re.findall dans le module Pexpect

J'ai actuellement un script qui ssh dans un serveur en utilisant pexpect. Je puis envoyer une commande au serveur qui retourne un tas de lignes p.before (p étant un spawn pexpect):

JUNK JUNK JUNK IP ADDRESS 10.0.0.1 JUNK JUNK 
JUNK IP ADDRESS 10.0.0.3 JUNK JUNK JUNK 
JUNK JUNK JUNK 
IP ADDRESS 10.0.0.2 JUNK JUNK JUNK JUNK 

Note: les adresses IP que j'ai utilisé dans l'exemple sont les aléatoires que j'ai utilisé juste pour cet exemple. Dans le script actuel, il peut s'agir de n'importe quelle adresse IP. Les informations que j'essaie de trouver sont les adresses IP.

Est-ce que pexpect peut faire quelque chose comme re.findall? Ou dois-je faire re.findall(regex, p.before)?

Répondre

0

Je pense que vous pouvez pirater ce que vous êtes à la recherche par le sous-classement searcher_re et en utilisant un appel expect_loop avec une instance de votre sous-classe, qui remplace la méthode search. Dans votre override, avant d'effectuer la recherche principale pour ce que vous utilisez maintenant, vous pouvez faire un findall sur le buffer pour une RE d'identification IP, et accumuler ces résultats dans une variable d'instance de votre choix. Ainsi, lorsque pexpect.expect_loop retourne, cette variable sur votre instance aura les "informations supplémentaires" que vous recherchez.

On dirait qu'un peu d'essais et d'erreurs serait nécessaire pour bien faire les choses, et je ne comprends pas quels sont les avantages que vous attendez (par ceci ou par tout autre hack à des fins similaires) par rapport à l'approche simple que vous avez mentionnée , c'est-à-dire, juste en utilisant re.findall directement, sans jouer avec les machines pexpect - soin d'expliquer ...?