Какой лучший способ получить список запущенных процессов в Unix с Python? - PullRequest
2 голосов
/ 02 октября 2008

Я пытаюсь:

import commands
print commands.getoutput("ps -u 0")

Но это не работает на OS X. ОС вместо команд выдает тот же результат: PID ПОЛЬЗОВАТЕЛЯ% CPU% MEM VSZ RSS TT STAT STARTED TIME КОМАНДА

не более

Ответы [ 6 ]

8 голосов
/ 02 октября 2008

Это работает в Mac OS X 10.5.5. Обратите внимание на заглавную -U опцию. Возможно, это была твоя проблема.

import subprocess
ps = subprocess.Popen("ps -U 0", shell=True, stdout=subprocess.PIPE)
print ps.stdout.read()
ps.stdout.close()
ps.wait()

Вот версия Python

Python 2.5.2 (r252:60911, Feb 22 2008, 07:57:53) 
[GCC 4.0.1 (Apple Computer, Inc. build 5363)] on darwin
6 голосов
/ 07 июня 2011

Если ОС поддерживает / proc, вы можете сделать:

>>> import os
>>> pids = [int(x) for x in os.listdir('/proc') if x.isdigit()]
>>> pids
[1, 2, 3, 6, 7, 9, 11, 12, 13, 15, ... 9406, 9414, 9428, 9444]
>>>

Кроссплатформенное решение (linux, freebsd, osx, windows) использует psutil :

>>> import psutil
>>> psutil.pids()
[1, 2, 3, 6, 7, 9, 11, 12, 13, 15, ... 9406, 9414, 9428, 9444]    
>>>
5 голосов
/ 02 октября 2008

Кроссплатформенная замена для commands равна subprocess. См. документацию модуля подпроцесса . Раздел «Замена старых модулей» включает в себя как получить выходные данные из команды .

Конечно, вам все равно нужно передать правильные аргументы в 'ps' для платформы, на которой вы находитесь. Python не может помочь вам в этом, и хотя я иногда упоминаю о сторонних библиотеках, которые пытаются это сделать, они обычно работают только на нескольких системах (например, строго в стиле SysV, строго в стиле BSD или только в системах с /proc.)

1 голос
/ 14 сентября 2010

любой из вышеперечисленных вызовов Python - но попробуйте 'pgrep

1 голос
/ 02 октября 2008

Я пробовал в OS X (10.5.5) и, кажется, работает нормально:

print commands.getoutput("ps -u 0")

UID   PID TTY           TIME CMD
0     1 ??         0:01.62 /sbin/launchd
0    10 ??         0:00.57 /usr/libexec/kextd

и т.д.

Python 2.5.1

0 голосов
/ 02 октября 2008

Работает, если вместо команд вы используете os:

import os
print os.system("ps -u 0")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...