我有一個名爲TET.EXE的工具,PDFlib家族的產品,它用於提取特定文本的座標。在Perl腳本中使用這些座標,我們可以提取所需的文本。這是一個手動的過程來運行.EXE,然後把座標給Perl,所以任何人都可以建議我讓整個過程完成。如何從Perl腳本中的外部命令中收集輸出?
我的意思是Perl腳本本身應運行.EXE並獲取所需的座標並提取文本。在linux中用來運行這個perl腳本的命令是什麼? 請,我需要你的建議以下。
在此先感謝。
我有一個名爲TET.EXE的工具,PDFlib家族的產品,它用於提取特定文本的座標。在Perl腳本中使用這些座標,我們可以提取所需的文本。這是一個手動的過程來運行.EXE,然後把座標給Perl,所以任何人都可以建議我讓整個過程完成。如何從Perl腳本中的外部命令中收集輸出?
我的意思是Perl腳本本身應運行.EXE並獲取所需的座標並提取文本。在linux中用來運行這個perl腳本的命令是什麼? 請,我需要你的建議以下。
在此先感謝。
如果我理解正確的,你想要Perl來啓動一個可執行文件,並做印刷到標準輸出文本的東西....在這種情況下,有幾個選擇:
my $output = `TED.EXE`;
這使得在變量$輸出TED.EXE命令的輸出,並且是最有可能夠你所需要的。
use IPC::Open3;
my($wtr, $rdr, $err);
my $pid = open3($wtr, $rdr, $err,
'some cmd and args', 'optarg', ...);
這將運行您的命令和同事$ WTR,$ RDR和$犯錯的標準輸入,輸出和錯誤流。
如果TET.EXE輸出到控制檯如果你想了解它,你可以捕捉
my $tetOutput = `tet.exe /myoptions`;
該輸出,搜索「perl的反引號」
我不明白的問題,但可能是:
my $result = qx{TET.EXE some.pdf some params};
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;
您也可以考慮另一種方法:use a Perl library to extract the coordinates。
perlipc文檔顯示了許多與Perl的外部進程進行交互的方式。
許多人告訴你使用反引號,但你也可以檢查出IPC::System::Simple,它提供了更強大的方法來處理操作系統特定的怪癖,做同樣的事情。
IPC :: Open3可能是矯枉過正的,程序吐出STDOUT(而不是STDERR)上的數據,並將輸入文件名作爲參數(因此不需要混淆STDIN)。簡單的打開就足夠了,而且更容易處理。 – 2009-04-15 14:16:14