Declare total=O
for repeat in {1..100}; do
executiontime=$(gtime -f "%U" python3 main.py | tail -0)
total=$(echo "scale=2; $total + $executiontime" | bc)
done
echo "$total/100"
上面的代码是循环的一部分,我需要变量total
才能具有文件 main.py 的平均执行时间。我很难打印变量total
的值,因为它是浮点变量。正确的语法是什么?
这是我得到的输出:
(standard_in) 2: parse error
当我使用该命令时,我认为问题出在命令 tail 之内:
gtime -f "%U" python3 main.py | tail -1
这是我得到的输出:
$ ./gtime -f "%U" python3 main.py | tail -1
10.08
)
但后面带有-0
gtime -f "%U" python3 main.py | tail -0
9.66
答案 0 :(得分:1)
gtime
将时间写入标准错误,这是您要捕获的时间,而不是标准输出。使用这个:
executiontime=$(gtime -f "%U" python3 main.py 2>&1 >/dev/null)
2>&1
将标准错误复制到gtime
的标准输出中; >/dev/null
导致gtime
的标准输出被丢弃。最终结果是您捕获了gtime
输出的时间,但没有捕获main.py
的输出。
到tail -0
的管道基本上与> /dev/null
相当,但是标准错误是 not 写入管道,这就是为什么仍然看到该数字的原因。但是$(...)
并没有捕捉到这一点。
答案 1 :(得分:0)
首先,您需要确保executionTime
拥有所需的浮点数,然后可以继续计算平均执行时间。
答案因所使用的外壳而异。例如Bash不支持浮点算术,因此,它将不起作用:
# will output the plain string without performing any arithmetic
echo "$total/100"
相反,您将需要使用其他方法,例如:
echo $(bc <<< "scale=2; $total/100")
允许我链接一些解释其他方法的相关答案: