2013-07-17 112 views
0

我正在嘗試運行tcpstat命令,該命令給出接收的請求數量爲icmp的輸出。同時我需要檢查計數,以便如果超過某個閾值,應該顯示一條消息。執行tcpstat命令並同時對其輸出執行

我嘗試了這樣的事情

#!/usr/bin/perl 

my @count= system "tcpstat -i eth1 -f icmp[0]==8 -o %C"; 

my $i=0; 
while ($i<1000) 
{ 
print "count of packets is :".$count[$i]."\n"; 
$i=$i+1; 
if($count[$i]>50) 
{ 
print "thats a lot of pings"; 
} 
} 

,但它似乎並沒有工作,因爲...命令的執行沒有用戶中斷並沒有結束......

是可能做到這一點?運行命令並同時對其輸出執行操作?

回答

0

在shell中運行您的tcpstat命令並將輸出傳送到您的perl腳本。

tcpstat -i eth1 -f icmp[0]==8 -o %C | perl script.pl 

這樣,你應該期望從<STDIN>輸入,並在Perl除去當然system通話。

+0

相同的問題..它給我一個閃爍的光標的空白屏幕。 可能是因爲直到tcp stat命令完成其執行,控件纔會轉到while循環。 –

+0

要追蹤它,您可以添加一些'print'調用並知道它被阻止的位置。考慮收到的輸入是否被緩衝。檢查這個http://stackoverflow.com/questions/12351500/perl-disable-buffering-input – VoidPointer