1

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

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

exe 文件在控制台上打印一些文本。是否也可以捕获它?

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

我正在使用 Perl 5.14

提前致谢

4

3 回答 3

5

应用程序可能不会将其输出打印到STDOUTSTDERR反引号运算符不会捕获它。要捕获两者,您可以使用以下内容:

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

对于更精细的捕获,您可能需要IPC::Open3借助它来“控制”所有进程的流(INOUTERR

于 2012-02-06T08:43:40.777 回答
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;
}

检查它是否对您有帮助

于 2012-02-06T08:47:05.143 回答
1

我推荐Scriptaliciouscapture的andcapture_err函数。

use Scriptalicious qw(capture);

my $output = capture('my_command', 'arg');
于 2012-02-06T08:55:08.387 回答