2009-04-15 3 views
3

J'ai un outil nommé TET.EXE, produit de la famille PDFlib, il est utilisé pour extraire les coordonnées d'un texte particulier. En utilisant ces coordonnées dans le script Perl, nous pouvons extraire le texte requis. C'est un processus manuel pour exécuter le fichier .EXE et ensuite donner les coordonnées à Perl, donc quelqu'un pourrait-il me suggérer de rendre tout ce processus inaudible. Ce que je veux dire, c'est que le script Perl lui-même doit exécuter le fichier .EXE et obtenir les coordonnées requises et extraire le texte. Quelles sont les commandes à utiliser dans linux pour exécuter ce script perl? S'il vous plaît, j'ai besoin de vos suggestions pour ce qui suit.
Merci d'avance.Comment rassembler la sortie d'une commande externe dans un script Perl?

Répondre

10

Si je comprends bien, vous voulez perl pour lancer un exécutable et faire quelque chose avec le texte imprimé à stdout .... dans ce cas, il y a quelques options:

Using backticks:

my $output = `TED.EXE`; 

Cela met la sortie de la commande TED.EXE dans la variable sortie $, et est très probablement suffisant pour ce que vous avez besoin.

using IPC::Open3:

use IPC::Open3; 
my($wtr, $rdr, $err); 
my $pid = open3($wtr, $rdr, $err, 
       'some cmd and args', 'optarg', ...); 

Cela va votre commande et associés $ WTR, rdr $ et $ err à l'entrée standard, sortie et flux d'erreur.

Il existe d'autres façons de faire ce que vous voulez (Expect.pm, Run3, etc), mais je crois que ce qui précède devrait être suffisant.

+0

IPC :: Open3 est probablement overkill, le programme crache les données sur STDOUT (pas STDERR) et prend le nom de fichier d'entrée comme argument (il n'est donc pas nécessaire de jouer avec STDIN). Un simple ouvert est suffisant et beaucoup plus facile à travailler. –

2

Si les sorties TET.EXE à la console, vous pouvez capturer cette sortie avec

my $tetOutput = `tet.exe /myoptions`; 

Si vous voulez lire à ce sujet, recherchez « backtick perl »

2

Je ne comprends pas la question, mais peut être:

my $result = qx{TET.EXE some.pdf some params}; 
6

Perl fournit de nombreuses méthodes pour exécuter un programme externe et rassembler sa sortie. Sur la base de la recherche à tet.exe Je dirais que le mieux est d'utiliser la fonction open et boucle sur la sortie en utilisant une expression régulière pour trouver les coordonnées:

open my $pdftext, "-|", "/path/to/tet.exe", "--text", $pdffile 
    or die "could not open $pdffile using tet.exe: $!"; 

my ($x, $y); 
while (my $line = <$pdftext>) { 
    last if ($x, $y) = $line =~ /regex that matches the coords/; 
} 
die "file did not contain coordinates" unless defined $x; 
0

La documentation perlipc montre de nombreuses façons d'interagir avec des processus externes de Perl.

Plusieurs personnes vous demandent d'utiliser des guillemets, mais vous pouvez également consulter IPC::System::Simple qui fournit des méthodes plus robustes pour faire la même chose en gérant les problèmes spécifiques au système d'exploitation.

Questions connexes