Как собрать вывод "iperf" в Perl - PullRequest
2 голосов
/ 21 января 2012

Я бегу iperf между двумя машинами linux (centos) в Perl.На стороне сервера генерируется вывод, показанный внизу.Мне нужно собрать длительность теста (в данном случае 0,4 с) и поместить ее в переменную.Это не должно быть сложно, но мне трудно, так как я новичок в Perl.

Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
[  4] local 192.168.18.2 port 5001 connected with 192.168.17.2 port 32840
[  4]  0.0- 0.4 sec  10240 KBytes  210890 Kbits/sec

1 Ответ

1 голос
/ 21 января 2012

Вы можете использовать это регулярное выражение для извлечения "0,4 сек" из вывода команды

/^\[\s*\d+\]\s*\d+\.\d+\s*\-\s*(\d+\.\d+)\s*sec/

Например:

use IPC::Open2;

my $pid = open2(\*CHLD_OUT, \*CHLD_IN, "iperf -s"); # open iperf server process

my $time_duration;

while (<CHLD_OUT>) { # waiting for command output
  if (/^\[\s*\d+\]\s*\d+\.\d+\s*\-\s*(\d+\.\d+)\s*sec/) {
    $time_duration = $1;
    print "time duration: $1\n";
  }
}

примечание: этот скрипт будет ожидать вывода команды, пока вы не прервете его вручную

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...