Besoin d'aide en Programmation Perl

Besoin d'aide en Programmation Perl - Perl - Programmation

Marsh Posté le 06-02-2003 à 10:58:56    

Est-il possible et coment fait on pour qu'un programme perl puisse récuperer en argument le résulat d'une commande ?
 
Ex: ls -l | grep txt
 
En gros je cherche à connaitre le port de communication entre deux programme et la mise en place possible en perl.  
 
Merci d'avance.


Message édité par vfqs le 06-02-2003 à 12:12:32
Reply

Marsh Posté le 06-02-2003 à 10:58:56   

Reply

Marsh Posté le 06-02-2003 à 11:54:53    

vfqs a écrit :

Est-il possible et coment fait on pour qu'un programme perl puisse récuperer en argument le résulat d'une commande ?
 
Ex: ls -l | grep txt
 
En gros je cherche à connaitre le port de communication entre deux programme et la mise en place possible en perl.  
 
Merci d'avance.
 

Tu voudrais qu'un programme Perl récupère comme argument externe le résultat d'une commande ?
 
Et pourquoi pas plutôt lancer directement la commande au sein même de ton programme Perl ?
 
Exemple, récupèration du répertoire courant :
 

Code :
  1. $RepCourant = `pwd`;
  2. print "resultat de la commande pwd = $RepCourant";


 
En utilisant l'antiquote (accessible par la touche 7 du clavier), la sortie de la commande indiquée entre ` ` est directement dirigée vers ta variable, ici $RepCourant.
 
Si tu n'as pas besoin de récupérer ce que te renvoies la commande, tu peux utiliser system(ma_commande)
 
Et si tu veux que l'appel à la commande fasse quitter le programme Perl en cours de traitement, remplace system par exec


---------------
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
Reply

Marsh Posté le 06-02-2003 à 12:19:57    

sinon, il y a aussi popen

Reply

Marsh Posté le 06-02-2003 à 15:15:39    

Aricoh a écrit :

Tu voudrais qu'un programme Perl récupère comme argument externe le résultat d'une commande ?
 
Et pourquoi pas plutôt lancer directement la commande au sein même de ton programme Perl ?
 
Exemple, récupèration du répertoire courant :
 

Code :
  1. $RepCourant = `pwd`;
  2. print "resultat de la commande pwd = $RepCourant";


 
En utilisant l'antiquote (accessible par la touche 7 du clavier), la sortie de la commande indiquée entre ` ` est directement dirigée vers ta variable, ici $RepCourant.
 
Si tu n'as pas besoin de récupérer ce que te renvoies la commande, tu peux utiliser system(ma_commande)
 
Et si tu veux que l'appel à la commande fasse quitter le programme Perl en cours de traitement, remplace system par exec

C pas ce que je voulais. Sur ton exmple la commande est dans le programme perl. Moi ce que je voulais c comment envoyer un résultat de command au programme perl.  :sweat:  
 
En fait ca sera un MTA qui enverra un message sur l'entrée standard d'un programme perl ou autre. Et comme je ne connais que le perl, benh... :)
 

Reply

Marsh Posté le 06-02-2003 à 15:22:39    

vfqs a écrit :

C pas ce que je voulais. Sur ton exmple la commande est dans le programme perl. Moi ce que je voulais c comment envoyer un résultat de command au programme perl.  :sweat:  
 
En fait ca sera un MTA qui enverra un message sur l'entrée standard d'un programme perl ou autre. Et comme je ne connais que le perl, benh... :)


 
Ok ok  :)
 
Un programme Perl peut recevoir ses arguments dans un tableau appelé @ARGV
 
Exemple tout bête, lancer le programme Perl toto.pl ;) qui ne fait qu'afficher le 1er argument qu'on lui transmet au lancement :
 

Code :
  1. #root>perl -w toto.pl coucou


 
voilà comment cette ligne de cde est traitée dans le prog toto.pl :
 

Code :
  1. #!/usr/bin/perl
  2. print $ARGV[0];    # affiche le 1er argument reçu


 


---------------
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
Reply

Marsh Posté le 06-02-2003 à 15:36:27    

J'ai deja teste procmail. Mais fait pas ce que je veux :(

Reply

Marsh Posté le 06-02-2003 à 15:56:10    

Aricoh a écrit :


 
Ok ok  :)
 
Un programme Perl peut recevoir ses arguments dans un tableau appelé @ARGV
 
Exemple tout bête, lancer le programme Perl toto.pl ;) qui ne fait qu'afficher le 1er argument qu'on lui transmet au lancement :
 

Code :
  1. #root>perl -w toto.pl coucou


 
voilà comment cette ligne de cde est traitée dans le prog toto.pl :
 

Code :
  1. #!/usr/bin/perl
  2. print $ARGV[0];    # affiche le 1er argument reçu


 
 

Ca aussi deja testé. Tjrs pas ce que je veux. En tout cas grand merci de ton aide.
 
En fait un exemple tout simple: ls -l | grep txt
 
Comment ces deux command communiquent entre elles ?  
 
Losque je fait un test avec un pregramme perl sous NT en ligne de cmd, g le message suivant: "Le processus a tenté d'écrire sur un canal non-existant."


Message édité par vfqs le 06-02-2003 à 15:57:52
Reply

Marsh Posté le 06-02-2003 à 16:10:53    

sous NT en ligne de cmd, g le message suivant: "Le processus a tenté d'écrire sur un canal non-existant." c'est qui est logique vu que '|' est le pipe de Unix, c'est-à-dire la sortie standard du premier processus est redirigé sur l'entrée standard du second

Reply

Marsh Posté le 06-02-2003 à 16:32:37    

western a écrit :

sous NT en ligne de cmd, g le message suivant: "Le processus a tenté d'écrire sur un canal non-existant." c'est qui est logique vu que '|' est le pipe de Unix, c'est-à-dire la sortie standard du premier processus est redirigé sur l'entrée standard du second  

Euh... ca marche sous nt, je l'utilsie notament avec mes requête ldapsearch avec find.

Reply

Marsh Posté le 06-02-2003 à 17:27:32    

Personne n'a une idée ?? :sweat:  G mal au crane de chercher... :cry:  Commence a  :pt1cable:  
 
Peut être pas faisable après tout.  :heink:

Reply

Marsh Posté le 06-02-2003 à 17:27:32   

Reply

Marsh Posté le 06-02-2003 à 17:39:55    

vfqs a écrit :

Personne n'a une idée ?? :sweat:  G mal au crane de chercher... :cry:  Commence a  :pt1cable:  
 
Peut être pas faisable après tout.  :heink:  


 
Tu fais ca via l'operateur diamant.
Je m'explique: quand tu fais X | Y, le programme Y se retrouve avec la sortie standard de X dans son entree standard, cad <> en perl.
 
Par exemple

Code :
  1. ls | perl -e 'print <>;'


 
si tu as plein de lignes

Code :
  1. while (<> ) {   # la ligne courante est dans $_
  2.    chomp;   # pour virer les fins de lignes
  3.    print "ma ligne est [$_]\n";
  4. }


 
Voila...

Reply

Marsh Posté le 06-02-2003 à 18:38:54    

phoenix35 a écrit :


 
Tu fais ca via l'operateur diamant.
Je m'explique: quand tu fais X | Y, le programme Y se retrouve avec la sortie standard de X dans son entree standard, cad <> en perl.
 
Par exemple

Code :
  1. ls | perl -e 'print <>;'


 
si tu as plein de lignes

Code :
  1. while (<> ) {   # la ligne courante est dans $_
  2.    chomp;   # pour virer les fins de lignes
  3.    print "ma ligne est [$_]\n";
  4. }


 
Voila...
 

Merci un collègue m'a aidé et on a trouver presque pareil.  :) (En tout cas bravo) :)
Voici:
 

Code :
  1. while ($toto = <> ) {
  2.        print $toto;
  3.        $i++;
  4.        }
  5. print $i;


Message édité par vfqs le 06-02-2003 à 18:52:49
Reply

Marsh Posté le 06-02-2003 à 18:49:49    

Me suis gourré.  :sweat:  
 
C plutot c qui suit qui marche plus:
 

Code :
  1. while ($toto = <> ) {
  2. $i = $i.$toto;
  3. }
  4. print $i;


Message édité par vfqs le 06-02-2003 à 18:50:20
Reply

Sujets relatifs:

Leave a Replay

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