3

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

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

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

4

3 回答 3

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);
于 2013-08-22T04:28:53.407 回答
0

你可以看看这个相关的问题。接受的答案建议使用Capture::Tiny.

于 2013-08-22T09:40:04.577 回答
0

像这样的东西可能会奏效

use strict;

my $fh;

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

while (<$fh>){
   chomp;
   print "here--$_\n";
}
于 2013-08-22T04:20:13.947 回答