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したがって、コマンドは正常に実行されているように見えますが、値をSTDOUTに割り当てる代わりに、に値を出力し$statsます。のような別のコマンドを使用するとls、期待どおりに機能するようです。私はここで何が間違っているのですか?

4

2 に答える 2

6

timestderr に出力します。

$ /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 に答える