2

我正在尝试做一些非常粗略的基准测试,所以我想time从我的脚本中运行命令。我有以下内容:

#!/usr/bin/perl

   use strict;

   my $command = "/usr/bin/time -f \"%U,%S,%E,%P,%K,%M\" ...";
   my $stats = `$command`;
   print "stats: $stats\n";

不幸的是,该命令的结果似乎从未分配给$stats. 当我执行脚本时,我得到如下内容:

0.15,0.03,0:00.44,43%,0,143808
stats:

所以看起来它time成功运行了命令,但打印出值 toSTDOUT而不是将值分配给$stats. 当我使用另一个命令时,例如ls,它似乎按预期工作。我在这里做错了什么?

4

2 回答 2

6

time打印到标准错误。

$ /usr/bin/time -f "%U,%S,%E,%P,%K,%M" echo foo >/dev/null
0.00,0.00,0:00.03,10%,0,2352

$ /usr/bin/time -f "%U,%S,%E,%P,%K,%M" echo foo >/dev/null 2>/dev/null


$

所以只需添加2>&1到您的命令中。

于 2013-02-28T16:42:40.147 回答
5

time写入标准错误,因此您需要将其重定向到标准输出以使用 Perl 的反引号捕获它

 my $command = "/usr/bin/time -f \"%U,%S,%E,%P,%K,%M\" ... 2>&1";
于 2013-02-28T16:42:17.123 回答