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

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

    Informations forums :
    Inscription : Juillet 2011
    Messages : 158
    Points : 88
    Points
    88
    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 régulier
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2011
    Messages : 158
    Points : 88
    Points
    88
    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 averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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
    Points : 406
    Points
    406
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    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("");
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

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

    Informations forums :
    Inscription : Juillet 2011
    Messages : 158
    Points : 88
    Points
    88
    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 averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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
    Points : 406
    Points
    406
    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

  7. #7
    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 : 58
    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
    Points : 5 753
    Points
    5 753
    Par défaut
    Il y a tout de même une limitation de Net::Telnet sous Windows, indiquée dans la documentation :
    Timing-out while making a connection is disabled for machines that don't support the alarm() function. Most notably these include MS-Windows machines.
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

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

    Informations forums :
    Inscription : Juillet 2011
    Messages : 158
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par 6ril23 Voir le message
    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
    Merci pour votre réponse.

    Des fichiers csv sous linux ?

    cela veut dire que sépare les informations par des ";" ?

    Et utiliser cette ligne de code pr lire le fichier ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     my($HOSTADDRESS, $HOSTNAME) = split(/ ;/);
    Merci pour votre réponse

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par tissam89 Voir le message
    Merci pour votre réponse.

    Des fichiers csv sous linux ?

    cela veut dire que sépare les informations par des ";" ?

    Et utiliser cette ligne de code pr lire le fichier ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     my($HOSTADDRESS, $HOSTNAME) = split(/ ;/);
    En fait, un fichier csv n'est rien d'autre qu'un fichier texte dont chaque colonne est séparé par 1 caractère défini (';' par exemple) ce qui permet aussi de pouvoir facilement le visualiser dans excel qui "interprète" ce caractère pour créer les colonne ET de pouvoir facilement le traiter sous tous les OS
    Attention si tu traites ces fichiers sous linux aux caractères de fin de ligne car: sous windows -> \r\n et sous linux ->\n seulement donc si tu découpes par ligne (~split par \n) il risque de rester des \r en fin de chaine dans ta dernière colonne ce qui ne va pas permettre la connexion car le HOSTNAME ne sera pas reconnu

    Pour ton bout de code, si ton fichier est un vrai fichier csv, il n'y a pas d'espace dans le split car format csv= col1;col2;...

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