3

我有一个名为 TET.EXE 的工具,它是 PDFlib 家族的产品,它用于提取特定文本的坐标。使用 Perl 脚本中的这些坐标,我们可以提取所需的文本。这是运行 .EXE 然后将坐标提供给 Perl 的手动过程,所以有人可以建议我完成整个过程。

我的意思是 Perl 脚本本身应该运行 .EXE 并获取所需的坐标并提取文本。在 linux 中使用哪些命令来运行这个 perl 脚本?拜托,我需要您对以下内容的建议。
提前致谢。

4

6 回答 6

10

如果我理解正确,您希望 perl 启动一个可执行文件并对打印到 stdout 的文本执行某些操作......在这种情况下,有几个选项:

使用反引号

my $output = `TED.EXE`;

这会将 TED.EXE 命令的输出放在变量 $output 中,并且很可能足以满足您的需要。

使用 IPC::Open3

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

这将运行您的命令并将 $wtr、$rdr 和 $err 关联到标准输入、输出和错误流。

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

于 2009-04-15T11:45:22.983 回答
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;
于 2009-04-15T12:00:31.230 回答
2

如果 TET.EXE 输出到控制台,您可以使用以下命令捕获该输出

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

如果您想了解它,请搜索“perl backtick”

于 2009-04-15T11:37:22.520 回答
2

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

my $result = qx{TET.EXE some.pdf some params};
于 2009-04-15T11:41:22.760 回答
1

您还可以考虑另一种方法:使用 Perl 库来提取坐标

于 2009-04-16T02:43:01.267 回答
0

perlipc文档展示了许多从 Perl 与外部进程交互的方法。

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

于 2009-04-16T16:44:27.433 回答