2013-02-28 63 views
2

我試圖做一些非常粗略的基準測試,所以我想從我的腳本運行time命令。我有以下幾點:從perl運行/ usr/bin/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時,它似乎按預期工作。我在這裏做錯了什麼?

+1

使用'qq [/ usr/bin/time ...]'可以避免大量轉義。 [(qq docs)](http://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators) – Schwern 2013-02-28 19:58:51

回答

6

time打印到stderr捕捉到它。

$ /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添加到您的命令。

5

time寫入標準錯誤,所以你需要將其重定向到標準輸出與Perl的反引號

my $command = "/usr/bin/time -f \"%U,%S,%E,%P,%K,%M\" ... 2>&1";