lancer 2 commandes simultanement en perl

lancer 2 commandes simultanement en perl - Perl - Programmation

Marsh Posté le 25-06-2004 à 17:49:06    

bonjour,
j'ai deux commandes que j'aimerais lancer simultanement dans un script mais je ne sais pas comment le faire.si ce n'est simultanement alors l'une après l'autre, mais il faudrait que la première contine à tourner.
je sais que pour lancer des cmd c'est ainsi:
@cmdvlc=`vlc -vvv udp://"@"$votre_adressemulticast`;  
@cmdeth=`ethereal -k`;
je suis obligé d'arreter la première pour ke la 2eme s'execute.
bon merci pour votre aide.

Reply

Marsh Posté le 25-06-2004 à 17:49:06   

Reply

Marsh Posté le 25-06-2004 à 18:21:46    

tu peut soit forker, soit utiliser une petite subtilité de system (non documenté) :
 
system(1, $cmd);
 
qui lance ta commande et retourne immediatement (mais bon tu peux pas recuperer le resultat...)
 
en fait je ne suit meme pas certainq ue ca marche avec autre chose qu'activePerl


Message édité par pospos le 25-06-2004 à 18:22:07
Reply

Marsh Posté le 26-06-2004 à 00:04:24    

pospos a écrit :

tu peut soit forker, soit utiliser une petite subtilité de system (non documenté) :
 
system(1, $cmd);
 
qui lance ta commande et retourne immediatement (mais bon tu peux pas recuperer le resultat...)
 
en fait je ne suit meme pas certainq ue ca marche avec autre chose qu'activePerl


 
jcrois que ca fonctionne ta 2e méthode
 
yaura bien un petit délai entre les 2 commandes, mais minime


---------------
http://www.boincstats.com/signature/user_664861.gif
Reply

Marsh Posté le 28-06-2004 à 11:32:07    

comment dois je faire pour forker??
je ne sais pas comment faire...

Reply

Marsh Posté le 28-06-2004 à 11:38:20    

Reply

Marsh Posté le 28-06-2004 à 11:48:49    

merci, je m'y connais pas des masses en perl, il n'y aurait pas qlq de plus simple ou plus comprehensible?

Reply

Marsh Posté le 28-06-2004 à 12:02:22    

Reply

Marsh Posté le 28-06-2004 à 12:09:27    

merci!!!

Reply

Marsh Posté le 28-06-2004 à 12:35:02    

j'ai testé avec le fork mais pour que le deuxième programme puisse se lancer je suis obligé d'arreter le premier. les deux ne s'execute pas en même temps...

Reply

Marsh Posté le 28-06-2004 à 16:00:56    

install Proc::Simple, c'est une interface simple pour le forck
 
au fait, tu es sous windows ou unix?

Reply

Marsh Posté le 28-06-2004 à 16:00:56   

Reply

Marsh Posté le 28-06-2004 à 17:37:17    

sous windows

Reply

Marsh Posté le 28-06-2004 à 17:55:03    

j'ai installé le paquet Proc::simple,
et j'ai l'impression que ça ne change rien voila ce queje fais dans le script:
 
#!c:/perl/bin/perl -w
 
print ("Rentrez votre adresse multicast:" );
 
@adrIn = ("233.60.197.5", "233.60.197.6", "233.60.197.48" );
 
 
$votre_adressemulticast = <STDIN>;  
print ("l'adresse multicast est: $votre_adressemulticast\n" );
   
 
 
 
$SIG{CHLD} = sub { wait };
 
 
unless ($pid = fork) {
 
 
        unless (fork) {
 
     exec `vlc -vvv udp://"@"$votre_adressemulticast)`;
     print ("vlc est lance" );
     
     #die "no exec";
  ##or  
     
           #exec `vlc -vvv udp://"@"$votre_adressemulticast)`;
            exec `ethereal -k`;
             
 
             
            exit 0;
        }
 
        exit 0;
 
    }
     
    waitpid($pid,0);
 
 
 
 
 
 
 
 
 
 

Reply

Marsh Posté le 29-06-2004 à 00:28:56    

pourkoi tu fais deux fork à la suite?
 
fait ca avec Proc::Simple!
regarde le synopsis:
http://search.cpan.org/~mschilli/P [...] /Simple.pm

Reply

Marsh Posté le 29-06-2004 à 11:28:26    

en faite je me suis dit que :
- si je fais un fork  
- et que dans le processus pere j'execute ethereal
- sinon je suis dans le fils et je fais un sleep et j'execute vlc
mais dans ce cas là comme je mets en pause ethereal je nepeux dc pas récupérer ce que lance mon deuxième programme avec ethereal? est ce que j'ai bien compris? j'ai regardé Proc::simple mais je n'ai pas compris grand chose, dc je ne préfère pas m'aventurer...merci
 
#!c:/perl/bin/perl -w
 
print ("Rentrez votre adresse multicast:" );
 
@adrIn = ("233.60.x.x", "233.60.x.x", "233.60.x.x" );
print ("choisissez une adresse multicast parmis les suivantes: '@adrIn\n' " );
 
$votre_adressemulticast = <STDIN>;  
print ("l'adresse multicast est: $votre_adressemulticast\n" );
 
 
if ($pid = fork) {
 system `ethereal -k &`;
 #system `vlc -vvv udp://"@"$votre_adressemulticast & `;
 
 
 
 }
else {
 #wait (5);
 sleep (5);
 system `vlc -vvv udp://"@"$votre_adressemulticast`;
 #system `ethereal -k `;
 
 
 }

Reply

Marsh Posté le 29-06-2004 à 13:43:38    

pour le fork fait des test sans lancer de commande (en affichant le PID par exemple) pour voir ou ca deconne (j'ai pas envi de relir ton truc la...)
 
mais visiblement la tu ne recupere pas la sortie de tes commandes
 
attend mais la je comprend pas ce que tu fais: tu melange system et `` ??
la tu va executer ce que te retourne le prog entre `` !!
 
 
bon, si tu n'utilise pas la sortie de tes execution pourkoi tu ne ferais pas simplement
 
system(1, "vlc -vvv udp......" );
system("ethernet -k....." );  
 
?


Message édité par pospos le 29-06-2004 à 13:44:15
Reply

Marsh Posté le 30-06-2004 à 10:19:34    

merci pour ton indication ça ouvre mes programmes l'un après l'autre mais ethereal ne lit rien.je vais essayer de voir pourquoi

Reply

Marsh Posté le 30-06-2004 à 10:33:24    

c'est bon ça marche BIEN!!!!!MERCI BCP de ton aide

Reply

Sujets relatifs:

Leave a Replay

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