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

Запустите команду tcpstat в оболочке и отправьте вывод на ваш perl скрипт.

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

Таким образом, следует ожидать ввод от <STDIN> и удалить system вызов в Perl, конечно.

+0

та же проблема .. он дает мне пустой экран с мигающим курсором. возможно потому, что элемент управления не переходит в цикл while, пока команда tcp stat не завершит выполнение. –

+0

Чтобы проследить его, вы можете добавить несколько вызовов 'print' и узнать, где он заблокирован. Подумайте, буферизуется ли входной сигнал или нет. Проверьте это http://stackoverflow.com/questions/12351500/perl-disable-buffering-input – VoidPointer

Смежные вопросы