Rechercher : dans
Par :

[PERL] Rendre une erreur non bloquante

Dernière réponse le 30 avr 2008 à 13:02:57 NewKind, le 2 avr 2007 à 17:17:59 
 Signaler ce message aux modérateurs

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 ...

1

lami20j, le 2 avr 2007 à 19:07:36

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

Répondre à lami20j

2

NewKind, le 3 avr 2007 à 09:44:45

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'...

Répondre à NewKind

3

lami20j, le 3 avr 2007 à 09:58:58

C'est quoi le module que tu utilises? lami20j

Répondre à lami20j

4

NewKind, le 3 avr 2007 à 10:11:34

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...

Répondre à NewKind

5

lami20j, le 3 avr 2007 à 10:19:27

Je vais jeter un coup d'oeil ;-) lami20j

Répondre à lami20j

6

NewKind, le 3 avr 2007 à 10:25:13

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.
#

Répondre à NewKind

7

lami20j, le 3 avr 2007 à 11:09:48

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";

lami20j

Répondre à lami20j

8

NewKind, le 3 avr 2007 à 11:47:52

$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 ;)

Répondre à NewKind

9

 clody, le 30 avr 2008 à 13:02:57

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

Répondre à clody