3 回答
TA贡献1880条经验 获得超4个赞
您需要将命令的输出发送到/dev/null
>/usr/bin/time -f "\t%E real,\t%U user,\t%S sys" ls -Fs >/dev/null
0:00.01 real, 0.00 user, 0.01 sys
这里的复杂性是我们想要丢弃命令输出但存储命令的输出/usr/bin/time。
将 的输出存储usr/bin/time为变量稍微复杂一些,因为/usr/bin/time它在 stderr 上显示它的输出。所以我们需要将命令输出发送到dev/null,然后将 time 的输出从 stderr 重定向并捕获到一个变量中。假设您可能想要执行比 ls -R 更复杂的命令,我们通常会调用 sh -c 'exec ' 这将在未来为您提供更多选择。因此:
result=$(/usr/bin/time -f "\t%E MM:ss:mm" sh -c 'exec ls -R >/dev/null' 2>&1 tee)
执行输出:
>result=$(/usr/bin/time -f "\t%E MM:ss:mm" sh -c 'exec ls -R >/dev/null' 2>&1 tee
); echo $result
0:20.60 MM:ss:mm
在这里我们将结果捕获为环境变量
>echo $result
0:20.60 MM:ss:mm
最后我们到达:
os.popen("/usr/bin/time -f '%E MM:ss:mm' sh -c 'exec ls -R >/dev/null' 2>&1 tee").read()
执行输出:
>python3
Python 3.6.9 (default, Apr 18 2020, 01:56:04)
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.popen("/usr/bin/time -f '%E MM:ss:mm' sh -c 'exec ls -R >/dev/null' 2>&1 tee").read()
'0:19.89 MM:ss:mm\n'
希望以上内容为您指明了正确的方向。
TA贡献1813条经验 获得超2个赞
它适用于subprocess但注意/usr/bin/time使用 stderr
import subprocess
proc = subprocess.Popen(["/usr/bin/time -f \"\t%E M:ss:mm, \t%P CPU\" ls -R"],
stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()
print("program output:", err.decode("utf-8"))
输出:
program output: 0:00.00 M:ss:mm, 100% CPU
TA贡献2012条经验 获得超12个赞
这段代码在 python 2.7 上对我有用
import os
from datetime import datetime
CPU_Pct="Cpu Usage :"+str(round(float(os.popen('''grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage }' ''').readline()),2))+ " time:" + datetim$
print(CPU_Pct)
输出会像
5.74 time:2020-07-07 10:53:22
如果你也想获得内存的使用,你可以将这一行添加到你的代码中
tot_m, used_m, free_m = map(int, os.popen('free -t -m').readlines()[-1].split()[1:])
最终代码可能是这样的:
import os
from datetime import datetime
CPU="|| CPU Usage :"+str(round(float(os.popen('''grep 'cpu ' /proc/stat | awk '{usage=($2+$4)*100/($2+$4+$5)} END {print usage }' ''').readline()),2))
Time = "|| time:" + datetime.now().strftime('%H:%M:%S')
tot_m, used_m, free_m = map(int, os.popen('free -t -m').readlines()[-1].split()[1:])
Memory ="|| memory :"+ str(used_m) +"/"+str(tot_m)
print(Time + CPU+Memory)
这是输出:
|| time:11:02:33|| CPU Usage :5.74|| memory :13847/37529
- 3 回答
- 0 关注
- 168 浏览
添加回答
举报