Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1167 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Utiliser une variable d'un script dans un autre script

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Utiliser une variable d'un script dans un autre script

n°1412207
duedos
Posté le 24-07-2006 à 12:05:14  profilanswer
 

Bonjour tout le monde.Je suis débutant en perl, et je suis confronté à un problème que mes différentes recherches n'ont pas résolu.
Voila, je souhaiterais savoir comment on peut utiliser dans un script une variable utilisée dans le script  précédent. Je vous fais suivre mes deux scripts :

 

secret.pl :

Code :
  1. #!/usr/bin/perl
  2. use DBI;
  3. use Asterisk::AGI;
  4. use strict;
  5. my $AGI = new Asterisk::AGI;
  6. my %input = $AGI->ReadParse();
  7. $AGI->exec('Playback','/usr/share/asterisk/sounds/fr/vm-login');
  8. my ($num) = $AGI->get_data('/usr/share/asterisk/sounds/beep',2000,2);
  9. my $dbh = DBI->connect("DBI:mysql:asterisk","*****","*****" );
  10. my $verif = $dbh->prepare("select num from messages where num=$num" );
  11. $verif -> execute();
  12. if ($num = $verif ->fetchrow)
  13.         {
  14.                 my $mess = $dbh->prepare("select message from messages where num=$num" );
  15.                 $mess -> execute();
  16.                 my $message = $mess->fetchrow;
  17.                 $AGI -> verbose("modification de $mess\n",1);
  18.                 $AGI -> verbose("modification de $message\n",1);
  19.                 $AGI -> exec('Playback',"fr/$message" );
  20.                 $AGI -> exec('Playback','fr/dir-instr');
  21.                 $AGI -> set_priority(3);
  22.         }
  23. else
  24.         {
  25.                 $AGI -> exec('Playback','/usr/share/asterisk/sounds/fr/conf-errormenu');
  26.                 $AGI ->set_priority(2);
  27.         }
 

verif_secret.pl :

Code :
  1. #!/usr/bin/perl
  2. use DBI;
  3. use Asterisk::AGI;
  4. use strict;
  5. my $AGI = new Asterisk::AGI;
  6. my %input = $AGI->ReadParse();
  7. my $verif = $AGI->get_data('beep',2000,1);
  8. if ($verif =~ m/1/)
  9.         {
  10.                 $AGI->exec('Playback','fr/vm-rec-temp');
  11.                 $AGI->exec('Playback','beep');
  12.                 $AGI->exec('Record',"/usr/share/asterisk/sounds/fr/$message:gsm" );
  13.                 $AGI->exec('Wait',2);
  14.                 $AGI->exec('Playback',"/usr/share/asterisk/sounds/fr/$message" );
  15.         }
  16. else
  17.         {
  18.                 $AGI->set_priority(2);
  19.         }


 
J'utilise en fait le module AGI du logiciel Asterisk, mais mon problème vient bien de perl.
Ce que je souhaite faire à l'aide de ces deux scripts, est la modification d'un message vocal.
Pour
cela, la personne appelant selectionne le message par le numero
l'identifiant dans la base de données. On récupère son nom dans '$mess' puis dans '$message'. Le passage à verif_secret.pl
sert à vérifier que ce message est bien celui à modifier, puis à
réenregistrer le message en conservant le même nom, c'est à dire la
chaîne de caractères '$message'. J'ai donc besoin de récupérer cette variable, issue de secret.pl, dans verif_secret.pl.
J'espère avoir été suffisamment clair.
Merci d'avance pour toute aide éventuelle.

Message cité 1 fois
Message édité par duedos le 12-09-2006 à 10:37:27
mood
Publicité
Posté le 24-07-2006 à 12:05:14  profilanswer
 

n°1412330
Elmoricq
Modérateur
Posté le 24-07-2006 à 14:59:00  profilanswer
 

Et Dieu inventa le retour chariot.

n°1412819
Aricoh
gentil mais fo po pousser
Posté le 25-07-2006 à 10:04:08  profilanswer
 

duedos a écrit :

Voila, je souhaiterais savoir comment on peut utiliser dans un script une variable utilisée dans le script  précédent. Je vous fais suivre mes deux scripts :


Il faut pour cela que ton premier script exécute le second en fournissant lors de l'exécution les variables en paramètres.
 
Exemple :
 

Code :
  1. # 1er script devant envoyer en argv $mess et $message au second programme
  2. # en fin de code du 1er script :
  3. system("perl monscript2.pl $mess $message" );
  4. # début du 2è script
  5. my ($mess, $message) = ($ARGV[0], $ARGV[1]);


 
NOTE 1 : la fonction system employée dans mon exemple fait que le script 1 va lancer le script 2 puis reprendra la main lorsque le script 2 se sera terminé. Utilise exec à la place de system si tu veux que le script 1 passe la main au script 2 en s'arrêtant immédiatement.
 
NOTE 2 : autre possibilité, écrire dans un fichier .conf, .ini ou tout ce que tu veux le contenu des variables que tu souhaites utiliser avec le script 2. Ce dernier n'aura qu'à lire ce fichier, en récupérer le contenu et se mettre à bosser.


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°1412826
duedos
Posté le 25-07-2006 à 10:16:15  profilanswer
 

Je vais essayer dans un premier temps cette première méthode puis j'essaierai la seconde si ca ne marche pas. Si tu pouvais m'expliquer un peu plus en détail comment faire, ce serait très sympa car je ne suis vraiment pas très habile en informatique engénéral et en programmation en particulier.

n°1412834
Aricoh
gentil mais fo po pousser
Posté le 25-07-2006 à 10:22:45  profilanswer
 

En admettant que tes 2 scripts perl sont localisés au même endroit ET que tu les lances manuellement.
 
secret.pl :

Code :
  1. #!/usr/bin/perl
  2. use DBI;
  3. use Asterisk::AGI;
  4. use strict;
  5. my $AGI = new Asterisk::AGI;
  6. my %input = $AGI->ReadParse();
  7. $AGI->exec('Playback','/usr/share/asterisk/sounds/fr/vm-login');
  8. my ($num) = $AGI->get_data('/usr/share/asterisk/sounds/beep',2000,2);
  9. my $dbh = DBI->connect("DBI:mysql:asterisk","root","czame" );
  10. my $verif = $dbh->prepare("select num from messages where num=$num" );
  11. $verif -> execute();
  12. if ($num = $verif ->fetchrow)
  13.         {
  14.                 my $mess = $dbh->prepare("select message from messages where num=$num" );
  15.                 $mess -> execute();
  16.                 my $message = $mess->fetchrow;
  17.                 $AGI -> verbose("modification de $mess\n",1);
  18.                 $AGI -> verbose("modification de $message\n",1);
  19.                 $AGI -> exec('Playback',"fr/$message" );
  20.                 $AGI -> exec('Playback','fr/dir-instr');
  21.                 $AGI -> set_priority(3);
  22.         }
  23. else
  24.         {
  25.                 $AGI -> exec('Playback','/usr/share/asterisk/sounds/fr/conf-errormenu');
  26.                 $AGI ->set_priority(2);
  27.         }
  28. ########### RAJOUT ##############
  29. open(TRACE, ">message.conf" ) or die("création message.conf erreur : $!\n" );
  30. print TRACE "$mess|$message";
  31. close(TRACE);


 
verif_secret.pl :

Code :
  1. #!/usr/bin/perl
  2. use DBI;
  3. use Asterisk::AGI;
  4. use strict;
  5. ########### RAJOUT ##############
  6. my $mess;
  7. my $message;
  8. open(TRACE, "message.conf" ) or die("lecture message.conf erreur : $!\n" );
  9. $_ = <TRACE>;
  10. close(TRACE);
  11. ($mess, $message) = split(/\\|/, $_);
  12. my $AGI = new Asterisk::AGI;
  13. my %input = $AGI->ReadParse();
  14. my $verif = $AGI->get_data('beep',2000,1);
  15. if ($verif =~ m/1/)
  16.         {
  17.                 $AGI->exec('Playback','fr/vm-rec-temp');
  18.                 $AGI->exec('Playback','beep');
  19.                 $AGI->exec('Record',"/usr/share/asterisk/sounds/fr/$message:gsm" );
  20.                 $AGI->exec('Wait',2);
  21.                 $AGI->exec('Playback',"/usr/share/asterisk/sounds/fr/$message" );
  22.         }
  23. else
  24.         {
  25.                 $AGI->set_priority(2);
  26.         }


 
L'exemple montré est la solution par fichier annexe (solution 2 de mon explication précédente).


Message édité par Aricoh le 25-07-2006 à 10:24:11

---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL
n°1412869
duedos
Posté le 25-07-2006 à 11:03:11  profilanswer
 

Merci Aricoh, tu es magique. Sans mauvais jeu de mots au passage...
Sans rire, cela faisait un moment que je galérais à cause de ce problème, et maintenant grâce à toi tout fonctionne.
Je ne saurais comment te remercier. Tu as déjà toute ma gratitude.
Merci encore
 :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:


Message édité par duedos le 25-07-2006 à 11:04:00
n°1412875
Aricoh
gentil mais fo po pousser
Posté le 25-07-2006 à 11:07:58  profilanswer
 

de rien  :jap:


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO -> Google Pixel 9 PRO XL

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Utiliser une variable d'un script dans un autre script

 

Sujets relatifs
nombre dans une BDD vers variablePasser une variable de php dans une requête sql
problème de boucle/session : envoi de doublons en nombre variable ?!Accès à une valeur de formulaire par l'intermédiaire d'une variable
Bloquer un script pour attendre la fin des traitementscreation variable automatique
Espace utiliser dans ma boite mail.[Perl] générer une variable grace à une chaine
utiliser un Hook dans un programme wxWidgetsVBA Excel : utiliser une Locale spécifique dans une macro
Plus de sujets relatifs à : Utiliser une variable d'un script dans un autre script


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR