next up previous index
suivant: Comment effacer ou copier monter: Tips and tricks précédent: Tips and tricks   Index

Comment récupérer la sortie d'un programme

Il existe deux manières pour effectuer cela : on peut d'abord utiliser des backquotes comme en shell. Par exemple :

$pwd = `/bin/pwd`;
chop($pwd);

La deuxième manière, qui offre plus de possibilités, est la suivante :


($pid = open(PIPE, "/bin/ps -a |")) or die "Error: $!\n";
(kill 0, $pid) or die "ps invocation failed";
while (defined($line = <PIPE>))
{
  ...;
}
close(PIPE);

Cette manière d'opérer se retrouve également dans l'opération inverse, qui consiste à envoyer des données sur l'entrée standard d'un programme :


($pid = open(PIPE, "| /usr/ucb/ftp")) or die "Error: $!\n";
(kill 0, $pid) or die "ftp invocation failed";
print PIPE "open ftp.enst-bretagne.fr\n";
...;
close(PIPE);
Dans l'exemple présenté ci-dessus, il serait plus intéressant de pouvoir envoyer des données sur l'entrée standard en même temps que de récupérer des données sur la sortie standard. Ceci est possible grâce à un module fourni dans la distribution de perl : IPC::Open2.



Olivier Aubert
1999-06-01