2016-01-22 81 views
2

我有script.sh,它向一些URL发送请求并使用whet打印执行时间。这里是源代码:PHP exec()和正在运行的shell脚本给出了不同的结果

time wget http://some.url 

当我从命令行运行它,我看到时间的结果与3位小数的精度:

real 0m0.584s 
user 0m0.000s 
sys  0m0.002s 

但是,当我使用PHP函数运行此SH exec("script.sh", $output) - ,我看到时间的结果仅为2位小数的精度:

0.00user 0.00system 0:00.32elapsed 0%CPU (0avgtext+0avgdata 3788maxresident)k 

我怎样才能得到相同的结果,正如我在命令行中也看到了吗?

+0

欺骗PHP版本以为它正在从一个交互shell中运行(例如,一个真正的终端窗口)。如果许多应用程序检测到输出将转到非交互式环境,则会将其输出重新格式化为更“后处理”友好。 –

回答

2

答案是in the manual

注意:一些壳(例如,bash的(1))具有一个内置的,其提供比这里所描述的命令更少的功能的时间的命令。要访问真实命令,您可能需要指定其路径名(类似/ usr/bin/time)。

内置的bash可以提高精度;如果你从shell运行/usr/bin/time,你也会看到两个小数位。

不幸的是,time是一个特殊情况,它是一个关键字,而不是实际的内置命令。否则bash的builtin命令可以用来强制它。

所以看起来你坚持保留两位小数,除非你想尝试不同的方法:

start_time=`date +%s%N` 
wget http://some.url 
end_time=`date +%s%N` 
bc -l <<< "scale=4;($end_time - $start_time)/1000000000" 
相关问题