2012-02-06 52 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