[Perl] Passage de variable d'un script a un autre

Passage de variable d'un script a un autre [Perl] - Perl - Programmation

Marsh Posté le 14-09-2004 à 15:10:42    

Salut,  
 
j'essais d'ecrire un script generique qui configure les variables d'environnement du script passé en argument.
 
Pour ce faire j'ai lu qu'en modifiant le hash special %ENV, c'etait possible, mais ca marche pas:
 
 
1° script: start.pl
 

Code :
  1. # script initialisant l'environnement
  2. ### modules ###
  3. use File::Spec;
  4. $cftexscript = "C:\\Documentations\\CFT\\INDUS_PERL";
  5. $ENV{'cftenvoi'} = "G:\\cft00\\envoi";
  6. # -------------------------------------------
  7. #  Lancement de la ligne de commande
  8. # -------------------------------------------
  9. if (not defined $ARGV[0]){
  10.       # Si pas d'arguments, on affiche les variables d'environnement
  11.       while(($clef,$valeur) = each %ENV){
  12.           print "$clef=$valeur \n";
  13.       }
  14. }else{
  15.       # sinon, on lance le script passé en argument
  16.       my $nom_script = File::Spec->catfile("$cftexscript", "@ARGV" );
  17.       exec "$nom_script";


 
 
2° script: test.pl
 

Code :
  1. #!/usr/bin/perl
  2. print "cftenvoi= $cftenvoi\n";


 
 
quand j'execute:  start.pl test.pl
 
la variable $cftenvoi affichée par test.pl est vide, donc l'environnement n'est pas transmis  :(  :(  :(  
 
 
comment kifofaire plz ??? :heink:  
 
 
 
 


---------------
Les kiwis c'est bon! Mangez-en
Reply

Marsh Posté le 14-09-2004 à 15:10:42   

Reply

Marsh Posté le 14-09-2004 à 15:19:23    

les variables d'environnement sons accessible avec $ENV{}, donc tu dois faire:
 
print $ENV{'cftenvoi'}
 
(et puis rajoute use strict; en haut de tes scripts, ca mettra tout de suit een evidence les problemes)

Reply

Marsh Posté le 14-09-2004 à 15:26:32    

j'ai essayé et ca marche pas.
 
Dans le script test.pl, j'ai fais un  
 

Code :
  1. print "cftenvoi = $ENV{'cftenvoi'} \n" ;


 
et ma variable est toujours vide


---------------
Les kiwis c'est bon! Mangez-en
Reply

Marsh Posté le 14-09-2004 à 15:28:37    

faut aps faire un export ou un truc du genre?

Reply

Marsh Posté le 14-09-2004 à 15:32:01    

en shell oui, mais la j'ai rien qui y ressemble  :??:


---------------
Les kiwis c'est bon! Mangez-en
Reply

Marsh Posté le 14-09-2004 à 15:35:35    


bin c'est le même principe
 
tu lances ton premier script dans un "shell perl"
 tu déclare ta variable d'env
 tu lance le 2e script dans un nouveau shell perl
  pouf t'a les variables d'environnement par défaut d'un "shell perl"


 
perso jvois pas pk tu veux utiliser des variables d'environnements au lieu de les passer en paramètre au script que pour tes autres

Reply

Marsh Posté le 14-09-2004 à 15:40:39    

ce que tu decris est exactement le code que j'ai ecris et qui marche pas  :D  
 
Je peux pas les asser en parametres car je prevois d'en initialiser un gros paquet, et que je veux pas m'amuser a recuperer les variables dans tout les scripts qui utiliseront le start.pl. :non:  
 
De plus, j'ai deja des arguements qui sont passé au script start: il s'agit du script a lancé avec ses arguments.


---------------
Les kiwis c'est bon! Mangez-en
Reply

Marsh Posté le 14-09-2004 à 15:45:45    

natwyn a écrit :

ce que tu decris est exactement le code que j'ai ecris et qui marche pas  :D  


 
c'est ce que je dis, c'est possiblement logique que ca ne fonctionne pas pour cette raison
 
lorsque tu lances quelques choses dans un nouveau shell, si tu n'as pas exporté tes variables d'environnements, elle ne seront pas dans le nouveau shell
 
si tu trouves que c'est trop de cassage de tête pour les paramètres, utilise Getopt::Long (-option valeur) ou CGI (option=valeur)

Reply

Marsh Posté le 14-09-2004 à 15:59:56    

je suis d'accord, mais je sais pas comment faire.
 
Surtout que dans mon bouquin O'Reilly, ils disent:

Citation :

Les nouveaux processus créés heriterontgénéralement de leur parent, des variables d'environnement, du repertoire de travail en cours, des flux d'entrées, de sortie et d'erreur standard...


 
alors ? comment faire pour passer des variable du process pere au process fils ?


---------------
Les kiwis c'est bon! Mangez-en
Reply

Marsh Posté le 14-09-2004 à 17:02:51    

J'AI TROUVE !!!
 
dans le code que j'ai donné, je n'utilisais pas la fonction fork qui créé un process fils (donc avec transmission d'environnement). Ca ne peut pas marcher avec exec utilisé seul.
 
pour plus de simplicité, j'utilise maintenant la fonction system() qui créé directement un process fils a la place de exec().
 
mon script test.pl peut ensuite recuperer les variables dans %ENV.
 
merci de votre aide


---------------
Les kiwis c'est bon! Mangez-en
Reply

Marsh Posté le 14-09-2004 à 17:02:51   

Reply

Marsh Posté le 16-09-2004 à 21:38:51    

Un processus ne peut pas modifier l'environnement de son parent. L'environnement est passe aux processus fils, c'est tout.

Reply

Marsh Posté le 17-09-2004 à 17:56:58    

et n'importe quelle variable le serait egalement

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed