2009-04-15 30 views
3

我有一个名为TET.EXE的工具,PDFlib家族的产品,它用于提取特定文本的坐标。在Perl脚本中使用这些坐标,我们可以提取所需的文本。这是一个手动的过程来运行.EXE,然后把坐标给Perl,所以任何人都可以建议我让整个过程完成。如何从Perl脚本中的外部命令中收集输出?

我的意思是Perl脚本本身应运行.EXE并获取所需的坐标并提取文本。在linux中用来运行这个perl脚本的命令是什么? 请,我需要你的建议以下。
在此先感谢。

回答

10

如果我理解正确的,你想要Perl来启动一个可执行文件,并做印刷到标准输出文本的东西....在这种情况下,有几个选择:

Using backticks

my $output = `TED.EXE`; 

这使得在变量$输出TED.EXE命令的输出,并且是最有可能够你所需要的。

using IPC::Open3

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

这将运行您的命令和同事$ WTR,$ RDR和$犯错的标准输入,输出和错误流。

还有其他方法可以做你想做的事(Expect.pm,Run3等),但我相信上面提到的应该足够了。

+0

IPC :: Open3可能是矫枉过正的,程序吐出STDOUT(而不是STDERR)上的数据,并将输入文件名作为参数(因此不需要混淆STDIN)。简单的打开就足够了,而且更容易处理。 – 2009-04-15 14:16:14

2

如果TET.EXE输出到控制台如果你想了解它,你可以捕捉

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

该输出,搜索“perl的反引号”

2

我不明白的问题,但可能是:

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

Perl提供了许多用于运行外部程序和收集其输出的方法。基于看着tet.exe我会说你最好的选择是使用正则表达式找到坐标使用open功能,并遍历输出:

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

perlipc文档显示了许多与Perl的外部进程进行交互的方式。

许多人告诉你使用反引号,但你也可以检查出IPC::System::Simple,它提供了更强大的方法来处理操作系统特定的怪癖,做同样的事情。

相关问题