Есть ли способ получить вывод ps программно? - PullRequest
4 голосов
/ 24 августа 2010

У меня есть веб-сервер, который я сейчас тестирую для загрузки процессора.По сути, я запускаю один процесс, чтобы запустить сервер с запросами, а затем запускаю следующий скрипт bash для определения загрузки процессора:

#! /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) способ получить вывод ps в Python без фактического запуска другого процесса для запуска команды.Я могу это сделать, но было бы действительно хорошо, если бы был API для этого.

Есть ли способ сделать это, или я собираюсь запустить внешнийскрипт?

Ответы [ 4 ]

3 голосов
/ 24 августа 2010

Я предпочитаю сделать что-то вроде этого.

collection.sh

for (( ;; ))
do
    date; ps -p $1 -o '%cpu'
done

Затем запустите collection.sh >someFile, пока вы "отбрасываете сервер запросами".

Затем убейте эту collection.sh операцию после того, как сервер был захвачен.В конце у вас будет файл с вашим журналом отметок даты и значений процессора.

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 голосов
/ 24 августа 2010

Вы можете проверить этот вопрос о разборе вывода ps с использованием Python.

В одном из ответов предлагается использовать модуль Python PSI . Хотя это расширение, поэтому я не знаю, насколько это подходит для вас.

В вопросе также показано, как вы можете вызвать подпроцесс ps, используя python:)

1 голос
/ 26 августа 2010

если вы не хотите вызывать PS, то почему бы вам не попробовать с файловой системой / proc. Я думаю, что вы можете написать программу на python, прочитать файлы из файловой системы / proc и извлечь нужные данные.сделал это с помощью Perl, написав встроенный C-код в Perl-скрипте. Я думаю, что вы можете найти аналогичный путь и в Python. Я думаю, что это выполнимо, но вам нужно пройти через / prof файловую систему и понять, что вы хотитекак ты можешь получить это.http://www.faqs.org/docs/kernel/x716.html выше URL может дать некоторый начальный толчок.

1 голос
/ 24 августа 2010

Вы можете запросить использование ЦП с помощью PySNMP .Это дает дополнительное преимущество возможности проводить измерения с удаленного компьютера.В этом отношении вы можете установить виртуальную машину Zenoss или ее родственников и позволить ей осуществлять мониторинг за вас.

...