2010-10-25 20 views
0

J'utilise perl avec le module Net::Telnet.perl Net :: Telnet wait_for un caractère du milieu, alors que l'action "print" met toujours en tampon les données

Mon problème est lors de l'envoi d'une commande qui a une sortie de 1000 lignes, le "wait_for" cherche une chaîne au milieu.

Le wait_for s'arrête mais le tampon continue de stocker la sortie de la commande. Le problème est avec la commande suivante que j'envoie - je reçois le reste de la sortie de la première commande. J'ai essayé d'envoyer un "$ session-> buffer_empty" mais ça n'aide pas. Est-ce que quelqu'un a une idée de ce qui se passe ici?

+0

J'ai attrapé le reste des données avec $ session-> getlines (Timeout => 1); –

Répondre

1

Le problème ici pourrait être que cmd 1 est toujours en train de remplir le tampon d'entrée même après l'appel de buffer_empty. Si vous savez ce qui est à la fin de la sortie de cmd 1, la meilleure solution serait d'ajouter un autre waitfor pour vous assurer que 'cmd 1' a fini de s'exécuter avant d'émettre 'cmd 2'.

#!/usr/bin/perl 
use Net::Telnet; 

$session = new ...(); 
$session->print("cmd 1"); 
my $output = $session->wait_for(String => "AAA"); 

$session->wait_for(Match => '/>$/'); 
$session->buffer_empty; 

$session->print("cmd 2"); 
my $output2 = $session->wait_for(String => "#"); 

Une autre option serait d'ajouter sleep avant d'appeler buffer_empty.

+0

Vous avez raison, je n'ai pas pensé à cela. mais la commande est un argument, et toutes les commandes ne doivent pas attendre deux fois. donc cette solution pourrait bloquer le script. avec -> getlines () - il ne metter pas si j'ai d'autres données ou non. il suffit d'attendre X secondes puis continuer ... –