LINUX.ORG.RU

[Python] Получить список запущенных процессов


0

0

Озаботился тут вопросом получения списка запущенных процессов и к своему удивлению не обнаружил ни одного инструмента для этого в стандартной библиотеке. Неужели я прав?

Быстрый гуглеж по этому вопросу только подтвердил мои опасения. Кроме парсинга выпука ps или /proc, а также сторонних библиотек, различной степени паршивости (вроде http://code.google.com/p/procpy/), ничего нет.

Не поймите меня неправильно, я люблю пайтон, но отсутствие инструментов для такой достаточно важной задачи в стандартной библиотеке говорит не в пользу языка.

Ну ладно, это все слюни и сопли, а теперь собственно вопрос. Тащить стороннюю библиотеку для моей поделки это слишком, поэтому, что будет быстрее запускать ps через subprocess или парсить /proc? Мне конкретно надо получить имя процесса, чтобы в том случае если он запущен сделать нужные мне вещи. Примеры эффективных алгоритмов приветствуются.

Ну и напоследок немного холивора: как с подобной функциональностью обстоят дела в других языках, конкретно интересуют ruby и java

★★★★★

Если такой мусор присутствует в стандартной библиотеке языка, то авторы этого языка подлежат принудительному прохождению лоботомии.

mv ★★★★★ ()

>Мне конкретно надо получить имя процесса, чтобы в том случае если он запущен сделать нужные мне вещи
Я так и не понял, что надо. По пиду получить имя? или пид по имени?(pidof)

arhibot ()
Ответ на: комментарий от arhibot

>Я так и не понял, что надо. По пиду получить имя? или пид по имени?(pidof)

«Грепнуть» список процессов по имени команды и если совпадения есть что нибудь (нужное) сделать.

fat_angel ★★★★★ ()
Ответ на: комментарий от mv

До-до-до!… Лучше как в лиспе, чтоб кроме списков ничего не было…

fat_angel ★★★★★ ()
Ответ на: комментарий от fat_angel

Ну так дёрни pidof <name>. Если нет процесса, он вернёт ненулевой код завершения. И да, на кой чёрт оно нужно в стандартной библиотеке?

GotF ★★★★★ ()
Ответ на: комментарий от srj

>Ну и воспользуйся pidof. Если pid выдался, значит, процесс с заданным именем есть, ???, profit.

Спасибо! Об этом как то не подумал. Сбили меня с толку те примеры, что я смотрел.

fat_angel ★★★★★ ()
Ответ на: комментарий от fat_angel

Не все так просто.

Блин встроенной функции — аналога pidof в этом пайтоне тоже нет. НАТЕ!!!1

Хотя дергать только pidof все же проще чем сначала дергать ps, а потом парсить его выхлоп.

fat_angel ★★★★★ ()

А прикинь, питоновский ftplib не умеет возвращать результат LIST в виде объектов, только строками с текстом а-ля ls -l.

И ничего, живём.

anonymous ()
Ответ на: комментарий от mv

> Если такой мусор присутствует в стандартной библиотеке языка, то авторы этого языка подлежат принудительному прохождению лоботомии.

А если это скриптовый язык для прикладных нужд, то авторов надо просто гильотинировать.)

Alesh ()

заодно вопрос почти в тему. а есть ли в линуксе хоть какая-нибудь возможность мониторить *множество* процессов без парсинга /proc? я знаю только способ с модулем ядра connector, может есть чего попроще?

anonymous ()
Ответ на: комментарий от fat_angel

>Наверное… Еще xml.dom представляющий из себя невнятное и непонятное УГ.

Вполне адекватная библиотека. Пользовался как-то xml.dom.minidom - всё просто и понятно.

А вот работа с фтп в питоне и правда не очень - тот же urllib2 с фтп и авторизацией так нормально и не заработал у меня, а вот ftplib работает, но надо парсить строки. С другой стороны там для этого даже место под callback имеется.

anonymous ()
Ответ на: комментарий от anonymous

> Вполне адекватная библиотека. Пользовался как-то xml.dom.minidom - всё просто и понятно.

А вы попробуйте скормить ему документ размером в десяток мегабайт и оцените производительность и потребление памяти.

SSN ()
Ответ на: комментарий от anonymous

сакс, ElementTree, на мой взгляд, сильно удобнее. По сути, те же яйца, но сделано более человечно.

true_admin ★★★★★ ()

парсить /proc конечно. он же для того и нужен. смотришь в каталогах процессов status и получаешь профит.

VladimirMalyk ★★★★★ ()
Ответ на: комментарий от anonymous

>а есть ли в линуксе хоть какая-нибудь возможность мониторить *множество* процессов без парсинга /proc? я знаю только способ с модулем ядра connector, может есть чего попроще?

/proc - это интерфейс системы для этого. Зачем много интерфейсов?

tim239 ()
Ответ на: комментарий от tim239

мониторить группу процессов, зная только часть их имени ( скажем, процессы питона ) через /proc - мучение. я понимаю когда procfs просто опция, как в bsd, но вот как основной интерфейс.. :(

anonymous ()
import commands

def process_num(process):
    return commands.getoutput('pidof %s |wc -w' % process)
expelled ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.