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始まるかどうかは思い出せませんが、好きなように微調整してください。$1$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 に答える