2013-07-17 190 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