我正在尝试time
使用以下命令获取输出。我唯一想要的是得到经过的时间,但我什么也没得到。
$result = `/usr/bin/time -f %e "./"$PROG > /dev/null`;
print $result;
所需的重定向有点棘手。
my $result = `/usr/bin/time -f %e "./"$PROG 2>&1 >/dev/null`;
time
在标准错误(文件描述符 2)上输出其测量值,但 Perl 反引号捕获标准输出(文件描述符 1)。将上面的重定向序列解读为“先将标准错误发送到标准输出的目的地,然后丢弃原来的标准输出”。</p>
如何STDERR
从外部命令中捕获?Perl FAQ 中解决了您所看到的问题。
要捕获命令
STDERR
但丢弃它STDOUT
:$output = `cmd 2>&1 1>/dev/null`; # either with backticks $pid = open(PH, "cmd 2>&1 1>/dev/null |"); # or with an open pipe while (<PH>) { } # plus a read
… 在所有这些示例中,排序都很重要。这是因为 shell 严格按照从左到右的顺序处理文件描述符重定向。
system("prog args 1>tmpfile 2>&1"); system("prog args 2>&1 1>tmpfile");
第一个命令将标准输出和标准错误都发送到临时文件。第二个命令在那里只发送旧的标准输出,旧的标准错误显示在旧的标准输出上。
请注意,$result
它将包含一个尾随换行符,您可以将其删除,chomp
如
chomp $result;
或全部在一行中
chomp(my $result = `/usr/bin/time -f %e "./"$PROG 2>&1 >/dev/null`);