[PERL] Rendre une erreur non bloquante

Résolu/Fermé
NewKind Messages postés 16 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 15 novembre 2007 - 2 avril 2007 à 17:17
 clody - 30 avril 2008 à 13:02
Salut,
J'execute plusieurs commandes telnet sur un switch cisco depuis un script en PERL afin de recuperer plusieurs fichiers.

Selon le modele de switch/routeur ciblé, certains fichiers ne sont pas present, or le script renvoi à ce moment là une erreur et s'arrete.
Ma question est donc la suivante : " Comment faire pour que le script execute les commandes suivantes sans s'interrompre apres l'erreur ? "

Voici la commande qui bloque selon le materiel ciblé:

 # Enable mode
  if ($session->enable("cisco") ) {
      @output2 = $session->cmd('show privilege');
      print "My privileges: @output\n";
  } else {
      warn "Can't enable: " . $session->errmsg;
  }

  # Execute a command  
  my @output2 = $session->cmd("copy flash:vlan.dat tftp://$backup_host/$device-vlan.dat\n\n\n");
  print @output2;


Merci d'avance ...

9 réponses

lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
2 avril 2007 à 19:07
Et si tu fait comme ça?
my @output2 = $session->cmd("copy flash:vlan.dat
                t[ftp://]$backup_host/$device-vlan.dat\n\n\n")
                or warn "E/S : $!\n";
ou
print @output2 if @output2;
--
lami20j
0
NewKind Messages postés 16 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 15 novembre 2007 2
3 avril 2007 à 09:44
Merci pour la réponse ! Mais malheureusement ça ne fonctionne pas.

Last command and router error

%Error opening flash:vlan.dat (No such file or directory) at C:\test\telnet_cisco.pl line 83


Le programme s'arrete dès que le routeur lui renvoit l'erreur, il n'a pas le temps d'aller jusqu'au 'warn' ou 'print output'...
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
3 avril 2007 à 09:58
C'est quoi le module que tu utilises?
0
NewKind Messages postés 16 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 15 novembre 2007 2
3 avril 2007 à 10:11
Net::Telnet::Cisco;

J'ai fait pas mal de recherches dans les docs sur ce module, mais je n'ai rien trouvé qui solutionne mon probleme jusqu'à present...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
3 avril 2007 à 10:19
Je vais jeter un coup d'oeil ;-)
0
NewKind Messages postés 16 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 15 novembre 2007 2
3 avril 2007 à 10:25
Merci !

J'avais trouvé quelques infos à cette adresse http://noc.tele.dk/Cisco.pm

mais j'ai peur de comprendre que ça n'est tout simplement pas faisable !


#
# PUBLIC CMD
#
# @results = $cisco->cmd($command [, $timeout]);
#
# Send "$command" to the remote Cisco, return the results in an
# array of lines. Prompt and command-echo are stripped.
# Error is reset.
#
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
3 avril 2007 à 11:09
mais j'ai peur de comprendre que ça n'est tout simplement pas faisable !

as-tu essayé avec eval?
$x = 0;
eval{ 
     $res = 1 / $x ;
     print "je ne peux pas continuer\n";
};

if ($@){
  print "Division par zero\n";   #exemple de traitement
}
print "Je continue le script\n";

0
NewKind Messages postés 16 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 15 novembre 2007 2
3 avril 2007 à 11:47
$x = 0;
eval{
$res = 1 / $x ;
print "je ne peux pas continuer\n";
};

if ($@){
print "Division par zero\n"; #exemple de traitement
}
print "Je continue le script\n";


--
lami20j


Possible ! Mais je manque de temps pour me lancer là dedans pour l'instant.
Comme je n'ai que deux types de materiel different à tester, j'ai plutot crée deux routines distinctes, et je viens preciser le type de materiel en parametre au lancement du script pour lancer l'une ou l'autre.

Merci en tout cas pour ton aide, je finirai sans doute par le modifier le script avec ces indications ;)
0
je voulais installer une webcam et par mégarde j'ai coché (à 3ème demande) bloquer en cochant retenir la réponse - impossible d'installer un message me fait savoir que l'utilisateur à bloquer l'installation - comment débloquer - merci beaucoup
0