Perl:如何在标准输出中同时捕获变量中的输出?

时间:2013-08-22 04:08:15

标签: perl rsync

我开始处理perl脚本,我正在调用外部rsync应用程序来进行备份。 我想捕获rsync操作的输出,我正在使用这种格式:

print "Starting backup. Please wait...\n";
my @output = `rsync -avut /home /media/drive/`;

此时,脚本正在运行,但是rsync的操作被捕获到我的数组中,我无法看到进度。有没有办法捕获上面的输出,但也在我的控制台中显示它?

3 个答案:

答案 0 :(得分:4)

反引号捕获STDOUT并将其放入数组中。

如果你想看到STDOUT以及在变量中捕获它,你可以使用open()。

我觉得这样的事可能有用吗?

my $output;
print "Starting backup. Please wait...\n";
open(RSYNC, "-|", "rsync -avut /home /media/drive") 
    or die "Can't exec rsync : $!";
while(<RSYNC>)
{
  print $_;
  $output .= $_;
}
close(RSYNC);

答案 1 :(得分:0)

这样的事情可能会成功

use strict;

my $fh;

open $fh, "find /|"; #don't forget to check it opens!!

while (<$fh>){
   chomp;
   print "here--$_\n";
}

答案 2 :(得分:0)

您可以查看相关的question。接受的answer建议使用Capture::Tiny