有没有办法以编程方式获得ps输出?

时间:2010-08-24 17:23:52

标签: python linux macos unix ps

我有一个网络服务器,我目前正在对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,那么真的很好。

有没有办法做到这一点,或者我将不得不启动外部脚本?

4 个答案:

答案 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可能会给出一些初步推动。