2013-02-27 70 views
0

我用下面的查询在Linux上获取服务器负载:如何在perl中实现linux查询?

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

现在我想通过运行一个Perl脚本的查询和打印输出浏览器。我怎么做?

+0

'系统( “W |头-n 1 | awk的 '{打印$ 12}'”)' – m0skit0 2013-02-27 11:12:59

+0

我如何捕获它的输出? – 2013-02-27 11:19:51

+0

你不需要'head',试试'w | awk'{print $ 12; exit}'' – Kent 2013-02-27 11:24:05

回答

1

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

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

$来转义,否则Perl会尝试发送命令之前进行插值的变量。

system()是调用外部命令的首选方式,如果你不需要需要输出。但是,如果您正在编写的不仅仅是一个快速的实用程序脚本,通常最好将系统命令替换为等效的Perl代码。有很多可用的模块可以复制常用shell命令和任务的功能。

+0

反推作品! – 2013-02-27 11:23:04

0

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

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个项目。
0

所有这一切需要的是

my $load = (split ' ', `w`, 13)[11];