我有一个网络服务器,我目前正在对CPU使用情况进行基准测试。我正在做的实际上是运行一个进程用请求抨击服务器,然后运行以下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中执行此操作会很好,因此我可以在一个脚本中运行它而不必运行两个脚本。我似乎无法找到任何平台独立(或至少独立于Linux和OS X的平台)方式来获取Python中的ps输出,而无需实际启动另一个进程来运行命令。我可以做到这一点,但是如果有一个用于执行此操作的API,那么真的很好。
有没有办法做到这一点,或者我将不得不启动外部脚本?
答案 0 :(得分:3)
您可以查看有关使用Python解析ps输出的this问题。
其中一个答案建议使用PSI python模块。这是一个扩展,所以我真的不知道这对你有多适合。
它还在问题中显示了如何使用python调用ps子进程:)
答案 1 :(得分:3)
我的偏好是做这样的事情。
collection.sh
for (( ;; ))
do
date; ps -p $1 -o '%cpu'
done
然后在“请求服务器”时运行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.
答案 2 :(得分:1)
您可以使用PySNMP查询CPU使用情况。这具有能够从远程计算机进行测量的附加益处。就此而言,您可以安装Zenoss或其亲属的VM,并让它为您进行监控。
答案 3 :(得分:1)
如果你不想调用PS那你为什么不尝试用/ proc文件系统。我想你可以写你的python程序并从/ proc文件系统中读取文件并提取你想要的数据。我使用perl,通过在perl脚本中编写内联的C代码来做到这一点。我认为你也可以在python中找到类似的方法。我认为它可行,但你需要通过/ prof文件系统,需要弄清楚你想要什么和你怎么能得到它。 http://www.faqs.org/docs/kernel/x716.html 上面的URL可能会给出一些初步推动。