【问题标题】:Is there any way to get ps output programmatically?有没有办法以编程方式获取 ps 输出?
【发布时间】:2010-08-24 17:23:51
【问题描述】:

我有一个网络服务器,我目前正在对 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 可以做到这一点,那将是真的很好。

有没有办法做到这一点,还是我必须启动外部脚本?

【问题讨论】:

  • 启动子进程有什么问题?这就是你的 shell 脚本所做的。它每次通过循环启动一堆进程。至少 3 个独立的进程,也许是 4 个。将其减少到 1 个有什么问题?
  • 我会说 5 进程一个用于 echo 第二个用于 python 第三个用于 ps 第四个用于 grep 第五个用于睡眠
  • @S.Lott - 这不是不想启动太多进程的问题,因为我认为 python 代码比使用 shell 程序更容易推理。
  • 如果启动子流程无关紧要,那么也许您应该将其从问题中删除。

标签: python linux macos unix ps


【解决方案1】:

您可以查看this 关于使用 Python 解析 ps 输出的问题。

其中一个答案建议使用PSI python 模块。虽然它是一个扩展,所以我真的不知道这对你来说有多合适。

它还在问题中显示了如何使用 python 调用 ps 子进程:)

【讨论】:

    【解决方案2】:

    我的偏好是做这样的事情。

    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.
    

    【讨论】:

      【解决方案3】:

      您可以使用PySNMP 查询 CPU 使用率。这具有能够从远程计算机进行测量的额外好处。就此而言,您可以安装 Zenoss 或其同类的 VM,并让它为您进行监控。

      【讨论】:

        【解决方案4】:

        如果你不想调用 PS 那么你为什么不尝试使用 /proc 文件系统。我认为你可以编写 python 程序并从 /proc 文件系统中读取文件并提取你想要的数据。我使用 perl 做到这一点,通过在 perl 脚本中编写内联 C 代码。我认为你也可以在 python 中找到类似的方法。我认为它是可行的,但是你需要通过 /prof 文件系统并且需要弄清楚你想要什么并且你怎么能得到它。 http://www.faqs.org/docs/kernel/x716.html 上面的 URL 可能会提供一些初始推送。

        【讨论】:

        • 问题是 linux 特有的。它不适用于 OS X。
        猜你喜欢
        • 2018-10-17
        • 2012-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-02
        • 2021-08-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多