我正在尝试time使用以下命令获取输出.我唯一想要的是获得经过的时间,但我一无所获.
$result = `/usr/bin/time -f %e "./"$PROG > /dev/null`;
print $result;
Run Code Online (Sandbox Code Playgroud)
所需的重定向只是有点棘手.
my $result = `/usr/bin/time -f %e "./"$PROG 2>&1 >/dev/null`;
Run Code Online (Sandbox Code Playgroud)
time输出其对标准错误(文件描述符2)的测量,但Perl反引号捕获标准输出(文件描述符1).读取上面的重定向序列为"首先将标准错误发送到标准输出的目标,然后丢弃原始标准输出."
这个问题的答案我如何捕捉STDERR外部指令的?在Perl FAQ中解决了您所看到的问题.
捕获命令
STDERR但丢弃它STDOUT:Run Code Online (Sandbox Code Playgroud)$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以严格从左到右的顺序处理文件描述符重定向.
Run Code Online (Sandbox Code Playgroud)system("prog args 1>tmpfile 2>&1"); system("prog args 2>&1 1>tmpfile");第一个命令将标准输出和标准错误发送到临时文件.第二个命令仅在那里发送旧的标准输出,并且旧的标准错误显示在旧的标准输出上.
请注意,$result将包含一个换行符,您可以删除chomp在
chomp $result;
Run Code Online (Sandbox Code Playgroud)
或全部在一行中
chomp(my $result = `/usr/bin/time -f %e "./"$PROG 2>&1 >/dev/null`);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
319 次 |
| 最近记录: |