IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Programmation et administration système Perl Discussion :

pattern match timed-out at ./Hosts.pl line 21


Sujet :

Programmation et administration système Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 158
    Par défaut pattern match timed-out at ./Hosts.pl line 21
    Bonjour,
    J'ai ecri un script qui li un fichier qui contient une liste d'adresse en entrée, et qu'il fait un show cdp neighbors au niveau de chaque équipement .

    Mon script perl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    #!/usr/bin/perl
    #use strict;
    use Net::Telnet;
    open(HOSTS, "Hosts.txt");
    mkdir("Hosts") if(!-d("Hosts"));
    open(MODEL_CFG, ">Hosts/hosts");
     while(<HOSTS>) {
     chomp();
    # my($HOSTADDRESS, $HOSTNAME, $communaute, $interfaces) = split(/ +/);
     my($HOSTADDRESS, $HOSTNAME) = split(/ +/);
    print $HOSTADDRESS,"\n";
    #print $HOSTNAME ;
     $telnet = new Net::Telnet ( Timeout=>20,Errmode=>'die');
     $telnet->open($HOSTADDRESS);
     $telnet->waitfor('/Username: $/i');
     $telnet->print('USER');
     $telnet->waitfor('/password: $/i');
     $telnet->print('PASSWORD');
     $telnet->waitfor('/#$/i');
     $telnet->print("show cdp neighbors");
     my @output = $telnet->waitfor('/#$/i');
    tout marche bien ,
    au niveau d'une certaine ligne de mon fichier d'entrée, j'ai cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pattern match timed-out at ./Hosts.pl line 21
    line 21 = my @output = $telnet->waitfor('/#$/i');

    Pourtant qu'il lit bien un grand nombre d'adresse dans le fichier en entrée au debut .

    Quand je fait un telnet manuellement sur l'équipement , cela marche bien .


    Comment résoudre cela svp ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 158
    Par défaut
    Comment ecrire une boucle qui fait un espace ( idéal, parceque j'utilise etrer qui est moins efficace) ,jusqu'à trouver #

    do {
    $telnet->print("\n");
    }
    until ($telnet->waitfor('/#$/i'); //Je ne connais pas trop le language perl , je sais pas comment dire jusqu'à trouver /#

    my @output = $telnet->waitfor('/#$/i');


    Aidez moi svp

  3. #3
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Par défaut
    Je connais pas telnet mais pour ton problème d'expression je peux peut être aider
    /#$/i -> signifie que tu cherches un '#' à la fin quelque soit la casse (majuscule/minuscule)

    si tu cherches un '#', /#/ devrait suffire.

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Ta boucle est correcte, mais lorsque le pattern n'est pas reconnu, le méthode définie par le paramètre du constructeur nommé "errmode" est appelée. Du coup, tu sors de ta boucle avec un die.
    Tu dois donc appeler ton waitfor avec une autre valeurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    do {
    $telnet->print("\n");
    }
    until ($telnet->waitfor(Match => '/#$/i', Errmode => "return");
    De cette manière, ta boucle pourra continuer silencieusement.
    Cela dit, j'ajouterais, au moins pendant la phase de mise au point, l'enregistrement du log (input_log et/ou dump_log).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $telnet->input_log("log.txt");
    do {
    $telnet->print("\n");
    }
    until ($telnet->waitfor(Match => '/#$/i', Errmode => "return");
    $telnet->input_log("");

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 158
    Par défaut
    Merci pour vos réponses .

    J'ai reglé le probleme en augmentant la taille de la fenetre dans mon routeur ( pas besoin d'appuyer sur espace pour avoir tt le resultat ).

    Maintenant le souci est que je veux executer mon script sur windows, mais il marche pas . Est ce qu'il y a des choses qu'il faut adapter ??

    Une autre question svp, moi je lit un fichier en entrée qui la forme suivante :

    je veux lire un fichier excell au lieu de mon fichier text, est ce que c possible d'avoir un fichier excell sous redhat 5 ? qu'est ce qu'il faut installer comme package pour cela SVP ?

    je vous remercie pour votre aide

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Par défaut
    Citation Envoyé par tissam89 Voir le message
    Maintenant le souci est que je veux executer mon script sur windows, mais il marche pas . Est ce qu'il y a des choses qu'il faut adapter ??
    normalement non rien n'a besoin d'être adapté (attention à la version de perl pour ne pas introduire de biais liés à ce fait) sauf peut être les formats de path

    Citation Envoyé par tissam89 Voir le message
    je veux lire un fichier excell au lieu de mon fichier text, est ce que c possible d'avoir un fichier excell sous redhat 5 ? qu'est ce qu'il faut installer comme package pour cela SVP ?
    Je te conseillerais plutôt de traiter des fichiers .csv (facile à faire dans excel et très facile à traiter ensuite) en séparant les champs par le classique ';' ou autre si besoin

Discussions similaires

  1. [Session]maîtriser le time out de la session
    Par croquedur dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 23/10/2007, 10h57
  2. [10g] ORA-01013 Time out
    Par rv78 dans le forum Oracle
    Réponses: 22
    Dernier message: 11/01/2006, 11h58
  3. MSXML2.serverXMLHTTP : The operation timed out
    Par malbaladejo dans le forum ASP
    Réponses: 1
    Dernier message: 06/12/2005, 08h50
  4. Problème de time-out avec un socket client.
    Par Depteam1 dans le forum MFC
    Réponses: 3
    Dernier message: 17/10/2005, 10h30
  5. error time out expired
    Par the_new dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2005, 13h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo