0

我在 linux 上使用以下查询来获取服务器负载:

w | head -n 1 | awk '{print $12}'

现在我想通过 perl 脚本运行查询并在浏览器中打印输出。我怎么做?

4

4 回答 4

3

以下产生一个进程而不是四个:

open(my $pipe, '-|', 'w') or die $!;
my $line = <$pipe>;
close($pipe);
my $load = (split ' ', $line)[11];
  • close($pipe)w关闭停止发送更多输出 的管道。
  • split ' ', EXPR在空白处拆分 EXPR。
  • (EXPR)[11]通过 EXPR 获得第 12 项返回。
于 2013-02-27T11:23:59.417 回答
1

您可以简单地使用反引号捕获 shell 命令的输出:

chomp( my $load = `w | head -n 1 | awk '{print \$12}'` );

$必须转义,否则 Perl 将在发送命令之前尝试插入变量。

system()如果您不需要输出,是调用外部命令的首选方式。

但是,如果您编写的不仅仅是快速实用程序脚本,通常最好用等效的 Perl 代码替换系统命令。有许多模块可以复制常见 shell 命令和任务的功能。

于 2013-02-27T11:19:19.483 回答
0

要在 perl 中运行系统命令,请参阅

于 2013-02-27T11:23:27.380 回答
0

所需要的只是

my $load = (split ' ', `w`, 13)[11];
于 2013-02-27T12:29:12.037 回答