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

Modules Perl Discussion :

Récupérer la sortie d'un module


Sujet :

Modules Perl

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2011
    Messages : 37
    Points : 33
    Points
    33
    Par défaut Récupérer la sortie d'un module
    Bonjour,

    Je suis en train de tenter de faire un script qui va scanner une série de serveur pour vérifier qu'ils sont bien en ligne et le cas échéant lancer une requête SQL pour récupérer des information.

    Dans un premier temps le script tournais bien, il se connectait à tous les serveur les un après les autres et affichait correctement dans une page web mes résultats.

    Le problème qui ce pose est lorsque l'un des serveurs ne réponds pas, en effet en cas d'échec de connexion au serveur le script s’arrête et ne vérifie pas les autres serveurs.

    J'ai donc pensé écrire un petit module pour tester la connexion l'objectif est de récupérer la sortie du module pour voir si la connexion c'est bien passée ou pas. (ça n'a pas l'air très clair du coup je vais poster un petit exemple)


    mon fichier pm ->
    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
     
    # --- fichier laoracle.pm ---
    package laoracle;
     
    my $i;
    my $dbh;
    my @code_site
    my $login = "login";
    my $mdp = "password";
     
    $code_site[1] = "site1";
    $code_site[2] = "site2";
    ....
    $code_site[20] = "site20";
     
    sub connect
    {
    $i = @_;
    ($dbh = DBI->connect("dbi:Oracle:$code_site[$i]", $login, $mdp)) or die;
    }
    1;
    mon script ->

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #!c:/Perl/bin/perl.exe
    use DBI;
    use laoracle;
     
    my $i;
     
    $i = 1;
    laoracle::connect($i);
    Donc la j'ai bien la récupération de la variable $i dans mon module, il se connecte bien mais je ne sais pas comment récupérer le résultat de ma connexion dans mon script, en gros savoir si tout c'est bien passé ...

    Si quelqu'un à une idée elle sera la bienvenue

    Par avance, merci.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Citation Envoyé par vindkald Voir le message

    Le problème qui ce pose est lorsque l'un des serveurs ne réponds pas, en effet en cas d'échec de connexion au serveur le script s’arrête et ne vérifie pas les autres serveurs.
    Comment effectues-tu le test de connexion au serveur ? C'est à ce niveau que tu dois sûrement effectuer une modification. Je suspecte un die à ce niveau. Peux-tu nous montrer le code qui effectue la connexion au serveur ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2011
    Messages : 37
    Points : 33
    Points
    33
    Par défaut
    La partie du script ou j'effectue le test sans module externe donne ça ->

    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
    23
     
    while ($i < "20") {
    @enr = ();
     
    if ( !($dbh = DBI->connect("dbi:Oracle:$code_site[$i]", $login, $mdp)))
    {
         $code_site[$i][1] = '<IMG src="ko.gif">';
         $code_site[$i][2] = '<FONT color="blue">N/A</FONT>';
         exit;
    }else
    {   $code_site[$i][1] = '<IMG src="ok.gif">';
         $requete = "SELECT * from table where status <>4";
         $sth = $dbh->prepare($requete);
         $sth->execute();
         $code_site[$i][2] = '<FONT color="green">Pas de fichier en erreur</FONT>';
     
    while (@enr = $sth -> fetchrow_array) {
         $code_site[$i][2] = "<FONT color=\"red\">@enr\n</FONT>";
    }
    $sth -> finish;
    $i++;
    }
    }
    En copiant le code ici je me dis que finalement c'est le "exit" qui doit me mettre dedans ...

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    J'ai ré-indenté ton code
    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
    while ( $i < 20 ) {
      @enr = ();
     
      if ( !( $dbh = DBI->connect( "dbi:Oracle:$code_site[$i]", $login, $mdp ) ) ) {
        $code_site[$i][1] = '<IMG src="ko.gif">';
        $code_site[$i][2] = '<FONT color="blue">N/A</FONT>';
        exit;
      }
      else {
        $code_site[$i][1] = '<IMG src="ok.gif">';
        $requete          = "SELECT * from table where status <>4";
        $sth              = $dbh->prepare($requete);
        $sth->execute();
        $code_site[$i][2] = '<FONT color="green">Pas de fichier en erreur</FONT>';
     
        while ( @enr = $sth->fetchrow_array ) {
          $code_site[$i][2] = "<FONT color=\"red\">@enr\n</FONT>";
        }
        $sth->finish;
        $i++;
      }
    }
    En effet, c'est le exit qui arrête le programme.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2011
    Messages : 37
    Points : 33
    Points
    33
    Par défaut
    J'ai fais une tentative sans le

    avec un nom de serveur fictif, inévitablement je tombe sur une erreur TNS "l'adresse symbolique n'a pas pu être résolue" se qui est normal cependant ça arrête complètement le script, il n'est pas possible de faire en sorte que malgré l'erreur de connexion l'éxèctution continue ?

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    sans code complet, difficile d'avoir une vue globale de ton programme. Néanmoins, je suppute que tout se fait dans ton While, c'est ça ?

    Si c'est le cas, Met une étiquette à ton While et fais un next.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    GESTION_SERVEUR:
    while ( $i < 20 ) {
      #...
      next GESTION_SERVEUR; # au lieu d'exit
    }

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Mars 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Mars 2011
    Messages : 37
    Points : 33
    Points
    33
    Par défaut
    Merci beaucoup pour le coup de main c'est effectivement beaucoup plus pratique que ce que je m’apprêtais à faire.

    Reste à trouver un moyen d'ajouter un état d'avancement sur le chargement de la page qui est asses long mais j'ai quelques pistes en ajax que je vais tester.

    Encore merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer la sortie d'une commande
    Par oceeco dans le forum wxPython
    Réponses: 3
    Dernier message: 11/02/2007, 20h37
  2. Récupérer la sortie standard dans une autre classe
    Par EvilAngel dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 22/12/2006, 17h15
  3. [C#] Récupérer la sortie d'un programme DOS
    Par olivier_23 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/08/2006, 13h54
  4. Réponses: 6
    Dernier message: 12/04/2006, 14h53

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