我有一个networking服务器,我目前正在对CPU使用率进行基准testing。 我所做的基本上是运行一个进程来使用请求来closures服务器,然后运行下面的bash脚本来确定CPU的使用情况:
#! /bin/bash for (( ;; )) do echo "`python -c 'import time; print time.time()'`, `ps -p $1 -o '%cpu' | grep -vi '%CPU'`" sleep 5 done
能够在Python中做到这一点是很好的,所以我可以在一个脚本中运行它,而不必运行两个脚本。 我似乎无法find任何平台独立(或至less平台独立于Linux和OS X)的方式来得到在Python的ps输出,而不实际启动另一个进程来运行命令。 我可以做到这一点,但是如果有一个API来做到这一点真的很好。
有没有办法做到这一点,或者我将不得不启动外部脚本?
你可以看看这个关于使用Python解析ps输出的问题。
其中一个答案建议使用PSI python模块。 虽然这是一个延伸,所以我不知道这对你有多合适。
它也显示了这个问题如何使用python来调用ps子进程
我的偏好是做这样的事情。
collection.sh
for (( ;; )) do date; ps -p $1 -o '%cpu' done
然后运行collection.sh >someFile
同时“用请求来collection.sh >someFile
服务器”。
然后在服务器砰的一声之后终止这个collection.sh
操作。 最后,你将会得到你的日期戳和CPU值的记录。
analysis.py
import datetime with( "someFile", "r" ) as source: for line in source: if line.strip() == "%CPU": continue try: date= datetime.datetime.strptime( line, "%a %b %d %H:%M:%S %Z %Y" ) except ValueError: cpu= float(line) print date, cpu # or whatever else you want to do with this data.
您可以使用PySNMP查询CPU使用情况。 这具有能够从远程计算机进行测量的额外好处。 对于这个问题,你可以安装一个Zenoss的虚拟机或者它的亲属,让它为你做监视。
如果你不想调用PS,那么你为什么不尝试使用/ proc文件系统。我认为你可以写你的Python程序,并从/ proc文件系统读取文件,并提取你想要的数据。我这样做perl,通过在Perl脚本中写入内联C代码。我认为你可以在python中找到类似的方式。我认为它是可行的,但是你需要通过/ prof文件系统,并且需要弄清楚你想要什么,以及如何得到它。 上面的URL http://www.faqs.org/docs/kernel/x716.html可能会给一些初步的推动。