使用 python 获取 unix 中正在运行的进程列表的最佳方法是什么?

Which is the best way to get a list of running processes in unix with python?

提问人:Vasil 提问时间:10/2/2008 最后编辑:Vasil 更新时间:2/9/2017 访问量:8134

问:

我在努力:

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

但它不适用于 os x。 os 而不是命令给出相同的输出: USER PID %CPU %MEM VSZ RSS TT STAT 启动时间命令

而已

评论


答:

0赞 jmissao 10/2/2008 #1

如果您使用 os 而不是命令,它会起作用:

import os
print os.system("ps -u 0")

评论

0赞 Thomas Wouters 10/2/2008
os.system() 不会给你输出,输出只是打印到屏幕上。os.system() 返回进程退出状态,您将在输出中看到尾随的“0”。
5赞 Thomas Wouters 10/2/2008 #2

跨平台的替代是 。请参阅子流程模块文档。“替换旧模块”部分包括如何从命令获取输出commandssubprocess

当然,你仍然需要为你所在的平台传递正确的参数到“ps”。Python 无法帮助你,虽然我偶尔看到提到尝试这样做的第三方库,但它们通常只适用于少数系统(比如严格的 SysV 风格、严格的 BSD 风格,或者只是带有 /proc 的系统)。

1赞 Dana 10/2/2008 #3

我已经在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

等。

蟒蛇 2.5.1

8赞 S.Lott 10/2/2008 #4

这适用于 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

评论

1赞 slacy 6/8/2012
这不会是非常跨平台的。Linux/Unix 上的 ps 选项将有所不同,并且在 Windows 上根本不存在。
1赞 Bill 9/15/2010 #5

上述任何 Python 调用 - 但请尝试“pgrep

6赞 Giampaolo Rodolà 6/7/2011 #6

如果操作系统支持 /proc fs,则可以执行以下操作:

>>> 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]    
>>>