2013-08-22 32 views
3

我開始使用perl腳本,並且正在調用外部rsync應用程序來執行備份。 我想捕捉的rsync的動作的輸出,我使用這種格式:Perl:如何在同一時間捕獲變量中的輸出並將其顯示在標準輸出中?

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

在這一點上,作爲被認爲腳本運行,但rsync的的動作捕獲到我的數組我看不到進展。有沒有辦法像上面那樣捕獲輸出,還可以在我的控制檯中顯示它?

回答

0

這樣的事情可能做的伎倆

use strict; 

my $fh; 

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

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

的反引號捕獲標準輸出,並將其置於你的陣列英寸

如果您想查看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); 
+0

大安東尼。這像一個魅力。我的確在perldoc中讀過關於「open」的選項,但是我在當時並沒有理解它的工作原理。 –

0

你可以看看這個相關的question。接受的answer建議使用Capture::Tiny

相關問題