提问人:Vasil 提问时间:10/2/2008 最后编辑:Vasil 更新时间:2/9/2017 访问量:8134
使用 python 获取 unix 中正在运行的进程列表的最佳方法是什么?
Which is the best way to get a list of running processes in unix with python?
问:
我在努力:
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
跨平台的替代是 。请参阅子流程模块文档。“替换旧模块”部分包括如何从命令获取输出。commands
subprocess
当然,你仍然需要为你所在的平台传递正确的参数到“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]
>>>
评论