0

我是 Perl 脚本的新手。我正在编写必须获得 CPU 利用率的代码。我正在尝试运行命令,然后在变量中获取输出。但是当我尝试打印变量时,我在屏幕上什么也没有。

命令在终端中工作正常并给我一个输出。(我正在使用 Eclipse)。

my $CPUusageOP;
$CPUusageOP = qx(top -b n 2 -d 0.01 | grep 'Cpu(s)' | tail -n 1 | gawk '{print $2+$4+$6}'); 
print "O/P of top command ", $CPUusageOP;

我得到的输出是:

    O/P of top command

预期输出:

    O/P of top command 31.4

谢谢。

4

2 回答 2

2

qx()将在您的 中插入$2等,gawk如果您使用过警告,您会知道的

use strict;
use warnings;

所以你需要逃避它们:

... gawk '{print \$2+\$4+\$6}'); 

此外,当然,这在 Perl 中是一件愚蠢的事情。你可以做所有这些,除了top(在某些模块中可能仍然可用)。例如:

my @lines = grep { /\QCpu(s)/ } qx(top -b n 2 -d 0.01);
my $CPUusageOP = $lines[-1];
$CPUusageOP = ( split ' ', $CPUusageOP )[1,3,5];

我不记得awk字段名称是否以$1or开头$0,但可以根据需要进行调整。

于 2015-01-06T09:39:29.683 回答
1

您不需要使用任何外部工具,而不是top. Perl 可以完成剩下的工作:

#!/usr/bin/perl
use warnings;
use strict;

my $line;
open my $TOP, '-|', qw( top -b n 2 -d 0.01 ) or die $!;
while (<$TOP>) {
  $line = $_ if /Cpu\(s\)/;
}
my ($us, $ni, $wa) = (split ' ', $line)[1, 3, 5];
{   no warnings 'numeric';
    print $us + $ni + $wa, "\n";
}
于 2015-01-06T09:49:51.947 回答