如何通过Perl中的反引号或系统获取文本

时间:2012-02-06 08:16:50

标签: perl backticks

我想在Perl中调用一个执行某些操作的EXE文件

我尝试通过backticksystem调用exe文件,但在这两种情况下我只得到返回值

exe文件将一些文本打印到控制台。是否有可能捕获它?

我研究了这个变量${^CHILD_ERROR_NATIVE},但我得到的只是返回值,而不是文本

我使用的是Perl 5.14

提前致谢

3 个答案:

答案 0 :(得分:5)

应用程序可能不会将其输出打印到STDOUT,而是打印STDERR,这不会被反引号操作符捕获。要捕获两者,您可以使用以下内容:

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

要进行更精细的捕获,您可能需要求助于IPC::Open3,您可以“控制”所有流程的流(INOUT和{{ 1}})。

答案 1 :(得分: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;
}

检查它是否对您有所帮助

答案 2 :(得分:1)

我推荐Scriptalicious中的capturecapture_err函数。

use Scriptalicious qw(capture);

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