使用python获取Unix中正在运行的进程列表的最佳方法是哪一种?

时间:2020-03-06 15:00:12  来源:igfitidea点击:

我正在努力:

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

但这在os x上不起作用。
os而不是命令提供了相同的输出:
用户PID%CPU%MEM VSZ RSS TT STAT启动时间命令

而已

解决方案

如果我们使用os而不是命令,它将起作用:

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

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

当然,我们仍然需要针对所使用的平台将正确的参数传递给" ps"。 Python不能,尽管我偶尔会看到第三方库尝试这样做,但是它们通常只能在少数系统上运行(例如严格的SysV风格,严格的BSD风格或者仅具有以下功能的系统) / proc。)

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

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

以上任何python调用-但尝试'pgrep