Script appelant un autre... [RESOLU]

Script appelant un autre... [RESOLU] - Perl - Programmation

Marsh Posté le 17-05-2005 à 11:41:32    

Bonjour,
 
Voilà j'ai deux scripts Perl et j'aimerais que l'un deux appelle l'autre durant l'execution.
Ce ne sont pas des modules donc pas possible de faire d'appel avec ::
Quelqu'un aurait-il une idée ?
 
Merci d'avance.


Message édité par babar9160 le 27-05-2005 à 13:34:53
Reply

Marsh Posté le 17-05-2005 à 11:41:32   

Reply

Marsh Posté le 17-05-2005 à 11:57:18    

C'est bon j'ai trouvé ... j'ai même honte d'avoir demander :$
 
il suffit de faire dans mon premier scritp  

Code :
  1. exec("script_deux.pl" );


 
il y aussi la possibilité de faire :

Code :
  1. my @command = ("perl.exe","script_deux.pl" );
  2. system(@command);

Reply

Marsh Posté le 17-05-2005 à 12:21:14    

Et tu peux également utiliser qx//, ou aussi les "apostrophes  inversées" (caractère ` = ALT-GR + 7)
 
Sachant qu'il y a des petites subtilités concernant les différents modes d'exécution.
 
Ainsi :
exec(commande) remplace le programme courant. Ce qui signifie qu'un exec() qui réussit ne revient jamais au script PERL. Ce dernier est arrêté.
 
system(commande) duplique (fork) le processus courant avant l'exécution de commande, et attend que cette exécution se termine avant de poursuivre l'exécution du script PERL. C'est comme un exec() qui ne quitte pas le script, en somme.
 
exec() et system() retournent le code retour de commande. Ces deux fonctions ne permettent pas d'intercepter les sorties. C'est à ça que sert qx/commande/ (ou son équivalent `commande`).
 
Note que tu peux aussi utiliser la commande open() en conjonction avec les pipes (car. '|' ).

Reply

Marsh Posté le 17-05-2005 à 13:59:03    

pour lancer un script externe, tu peux aussi utiliser do:

Code :
  1. do "script.pl"


par rapport à un exec ou un system l'avantage est qu'on ne lance pas un deuxieme interpreteur. On peut meme lire/ecrire les memes variables.
 
Dans tous les cas ca n'est pas bon signe au niveau du design. Mieux vaut essayer de gerer ce genre de chose avec des packages.


Message édité par pospos le 17-05-2005 à 13:59:27
Reply

Marsh Posté le 17-05-2005 à 15:25:06    

Oui je le sais bien, le truc c'est que c'est une première approche. Mais le package étant bien plus pratique sera mis en place d'ici peu, merci en tout cas à vous deux :p

Reply

Marsh Posté le 27-05-2005 à 11:59:29    

Alors juste un petit complément!!!
j'ai un cgi qui lance grace a system(commande) un script.pl sur mon sever après le lancement je récupère le PID que je stock dans un fichier. Aprés un autre script CGI récupère le PID et me kill -9 mon script.pl.  
Je voulais juste savoir si ma démarche tient la route ou si il y a un moyenne plus élégant de faire ça!!

Reply

Marsh Posté le 27-05-2005 à 12:08:20    

Citation :

Aprés un autre script CGI récupère le PID et me kill -9 mon script.pl.


 
[:le poney de mr pink]
 
C'est horrible.
Déjà le -9 n'est pas obligatoire. Pas sûr que tu aies besoin d'un SIGKILL pour stopper ton script.
 
En plus, ton architecture me semble bizarre. Pourquoi ton script.pl a-t'il besoin d'être tué ? Tu peux pas lui donner une condition d'arrêt ?

Reply

Marsh Posté le 27-05-2005 à 13:11:48    

Alors c'est un coté de la prog perl que je n'est jamais explorer je t'explique exactement la finalitée de la chose!
mon script.pl qui est sur mon serveur lancer des requettes SNMP a intervale régulier. il faudrait que ce script puisse etre démarrer avec comme param l'interval de mesure et aussi qu'il puisse etre stopé et tout ça depuis l'interface web.
un autre truc aussi comment fairais tu pour que mon script.pl soit lancer a intervale régulier?

Reply

Marsh Posté le 27-05-2005 à 15:50:54    

mc40 a écrit :

Alors c'est un coté de la prog perl que je n'est jamais explorer je t'explique exactement la finalitée de la chose!
mon script.pl qui est sur mon serveur lancer des requettes SNMP a intervale régulier. il faudrait que ce script puisse etre démarrer avec comme param l'interval de mesure et aussi qu'il puisse etre stopé et tout ça depuis l'interface web.
un autre truc aussi comment fairais tu pour que mon script.pl soit lancer a intervale régulier?


 
tu ne le "lance pas" à interval régulier, tu le lance 1 fois et le fait boucler jusqu'à ce que tu rencontre une condition X

Reply

Marsh Posté le 28-05-2005 à 01:33:46    

Oui merci ça je sais met le truc c'est comment envoyer des paramètres a un script qui est deja lancé!!!
Moi je sais pas si vous pouvez m'expliciter tout ça SVP!!

Reply

Marsh Posté le 28-05-2005 à 01:33:46   

Reply

Marsh Posté le 28-05-2005 à 22:14:26    

ca sfait pas vraiment envoyer des paramêtre à un script en exécution

Reply

Marsh Posté le 30-05-2005 à 11:14:13    

comment je peut faire au mieux!!! alors déantologiquement parlant?

Reply

Marsh Posté le 30-05-2005 à 11:14:59    

que ça fasse pas trp bricolage !!! :p

Reply

Marsh Posté le 30-05-2005 à 11:45:28    

le mieux dans ce cas c'est de faire de la vraie communication inter process. regarde perlipc (google).
 
sinon tu a toujours la solution du bon vieux fichier que tu check (avec des locks). tu peux aussi passer par une base de donnée simple genre berclay ou sqlite.

Reply

Marsh Posté le 30-05-2005 à 12:49:04    

Oui alors la!! J'avoue que ça me dépasse!!! Je vais voir perlipc!!
Merci pospos.


Message édité par mc40 le 30-05-2005 à 12:49:50
Reply

Marsh Posté le 30-05-2005 à 13:52:06    

heuuu encore un truc!!
lorsque j'appel ma lib SNMP_utils j'ai des erreurs qui sont normales mais j'aimerai ne pas les voir s'afficher sur ma page html il me semble que c'est une option à rajouter à la fin de #! c:\perl\bin\perl.exe -? mais laquelle??

Reply

Sujets relatifs:

Leave a Replay

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