2012-02-06 47 views
1

我想打電話給Perl中的EXE文件,該文件執行一些動作如何獲得通過反引號或系統文本在Perl

我試圖通過backticksystem但在這兩種情況下調用exe文件我只得到了回報值

EXE文件打印到控制檯上一些文字。是否有可能捕捉到這一點?

我看着這個變量${^CHILD_ERROR_NATIVE}但我只得到返回值,而不是文字

我使用Perl 5.14

在此先感謝

回答

5

的應用程序可能無法將其輸出打印到STDOUTSTDERR代替,這是不被反引號運算符捕獲。同時捕獲,你可以使用以下命令:

my $binary = 'foo.exe'; 
my $output = `$binary 2>&1`; 

爲了更微調捕捉,你可能要訴諸IPC::Open3使用它你可以「控制」全過程流(INOUTERR)。

+0

工作太棒了!謝謝 – KK99 2012-02-06 09:00:35

+0

真的嗎?然後我撤回我的評論。 – TLP 2012-02-06 15:08:58

1

我用來從Perl腳本執行命令並捕獲輸出這樣

sub execute_command() { 
    my($host) = @_; 
    open(COMMAND_IN, "your_command |"); 
    while (<COMMAND_IN>) 
    { #The COMMAND_IN will have the output of the command 
    #Read the output of your command here... 
    $ans = $_; 
    } 
    close(COMMAND_IN); 
    return $ans; 
} 

檢查它是否可以幫助你

1

我推薦capturecapture_err功能從Scriptalicious

use Scriptalicious qw(capture); 

my $output = capture('my_command', 'arg'); 
+1

該模塊已有四年('使用5.006')並將所有內容導出到調用命名空間('@ EXPORT')中。當使用更新版本的perl的這個模塊時,可能會有一些問題(重新定義'say' f.ex.)。 – dgw 2012-02-06 10:10:25

+0

雖然是舊的,該模塊工作得很好。你可能應該明確導入你需要的功能。我添加了一個這樣的例子。 – 2012-02-06 14:49:10

+0

+1用於顯式導入。 – dgw 2012-02-06 17:24:57