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

Langage Perl Discussion :

Pb de passage de parametre d'un script a un autre


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut Pb de passage de parametre d'un script a un autre
    Voila je dois ecrit un script qui ping des machines et dans le cas ou elle ne repondent pas cela lance un autre petit script qui la ping toute les 30 minutes
    Mais voila le pb est que lors du passage a l'autre script de l'adresse IP il me dit :
    Use of uninitialized value in string at ./pingE.pl line 10.
    Use of uninitialized value in print at ./pingE.pl line 15.
    Use of uninitialized value in string at ./pingE.pl line 16.
    Use of uninitialized value in concatenation (.) or string at ./pingE.pl line 21.
    Use of uninitialized value in concatenation (.) or string at ./pingE.pl line 21.
    Use of uninitialized value in concatenation (.) or string at ./pingE.pl line 21.

    Le premier script qui appel le 2eme
    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
    24
    25
    26
    27
    28
    29
    30
    31
     
    #!/usr/bin/perl -w
     
    use strict;
    use Net::Ping;
    use Mail::Sendmail;
     
     
    my @cam = ("192\.168\.1\.70","192\.168\.1\.59"); ##("192.168.1.150","192.168.1.152","192.168.1.153","192.168.1.154","192.168.1.157","192.168.1.158","192.168.1.159","192.168.1.70","192.168.1.59");
     
    my $p = Net::Ping->new("icmp");
    my $chemin = "./pingE.pl";
     
    foreach my $ip (@cam){
    	if ($p->ping("$ip")) {
    		my %mail = ( To      => "",
                    	   From    => "",
    			   Subject => "",
                    	   Message => 
                    	  );
    		if (sendmail %mail) { print "Mail sent OK ". $ip.".\n" }
    	        else { print "Error sending mail: $Mail::Sendmail::error \n" }
    	} 
    	else {
    		print $chemin;
    		print "\n";
    		print $ip;
    		print "\n";
    		system($chemin,$ip);
    	}
    }
    Le 2eme Script qui fait le ping en cas de non reponce
    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
    24
    25
    26
    27
    28
    29
    30
    31
     
    #!/usr/bin/perl -w
     
    use strict;
    use Net::Ping;
    use Mail::Sendmail;
    my $p = Net::Ping->new("icmp");
     
     
     
    print "$_";
     
     
     
    my $ipE=$_[1];
    print $ipE;
    if ($p->ping("$ipE")) {
    		print " oK ";
    		return;
    	} else {
    		print " Ko ";
    		my %mail = ( To    =>,
                    	   From    =>
    			   Subject =>",
                    	   Message => 
                    	  );
    		if (sendmail %mail) { print "Mail sent OK ". $ipE.".\n" }
    	        else { print "Error sending mail: $Mail::Sendmail::error \n" }
    		sleep(1800);
    		&pingE($ipE);
    	}

    Merci d'avance de vos reponce

  2. #2
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Parce que dans ton 2° script, pour lire les arguments, il faut passer par le tableau @ARGV et non pas le tableau @_. C'est dans une sub qu'on peut lire @_... De plus, tu lis l'élément d'indice 1 alors que c'est l'élément d'indice 0 qu'il faut lire:

    à remplacer par

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    merci c'est exactement ce que je voulais ,
    il me reste un petite question,
    system fait un fork mais j aimerai (si c possible bien sur) pouvoir continuer le script pere sans attendre que le fils finisse.

  4. #4
    Membre éprouvé Avatar de MarneusCalgarXP
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    911
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 911
    Points : 1 118
    Points
    1 118
    Par défaut
    Il suffit de faire un fork manuellement:

    Code perl : 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
     
    my $chemin = "./pingE.pl";
    my @pids;
     
    sub lanceMonProg($)
    {
        my ($ip) = @_;
        die("problème de fork !!!!\n"), unless defined(my $pid = fork());
        if ($pid == 0)
        {
            # c'est le fils ! on execute la commande
            system($chemin, $ip);
            # et après, on sort
            exit;
        }
        else 
        {
            # c'est le père, on n'attend pas le fils, on continue ! on stocke juste le pid
            push(@pids, $pid);
        }
    }
     
    # on lance le prog en parallèle
    &lanceMonprog('192.168.12.15');
    # suite du code, executée immédiatement
    print("wé on continue sans attendre le résultat !\n");
     
    # sub appelée automatiquement en fin de programme
    END {
        # on attend la fin des fils
        foreach my $pid(@pids) {
            waitpid($pid, 0);
        }
    }

    Je ne répond à aucune question technique par MP.

    Si votre problème est réglé, n'oubliez pas Dans tous les cas

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

Discussions similaires

  1. [C#] passage de parametre d'un formulaire a l'autre
    Par nashouille dans le forum Windows Forms
    Réponses: 4
    Dernier message: 01/03/2010, 17h06
  2. Passage de parametre d'une fenetre a une autre
    Par christclamard dans le forum WinDev
    Réponses: 2
    Dernier message: 06/10/2008, 09h15
  3. passage de parametre d'un formulaire a un autre
    Par el_quincho dans le forum Access
    Réponses: 2
    Dernier message: 29/12/2005, 16h17
  4. Réponses: 3
    Dernier message: 05/04/2005, 14h26
  5. Réponses: 34
    Dernier message: 25/03/2005, 22h59

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