有哪些收集过程信息的方法?

时间:2015-03-01 02:00:23

标签: python linux bash

我目前正在运行:

ps -f -u vinish | sort -k5

但如果不在我的代码中编写相同的引用命令,我怎么能在Python中执行此操作?

为了执行bash命令,我使用os.system('<cmd>')或通过subprocess进行调用,但我正在查找不会包含任何bash命令的内容。

1 个答案:

答案 0 :(得分:1)

您只需对subprocess.check_output()的输出进行排序:

import subprocess

processes = subprocess.check_output(['ps', '-f', '-u', 'vinish'])
for line in sorted(processes.splitlines(), key=lambda l: int(l.split()[1])):
    print(line)

这在sort -k5输出上更好,因为它提取第二列并对其进行数字排序。

请注意,没有创建子shell(此处没有执行 bash命令); Python直接执行ps命令。这是在不安装第三方库的情况下获取流程信息的最简单方法。

如果您真的想避免执行外部命令,则必须使用附加库。我在这里推荐psutil library

import psutil

matching = [proc for proc in psutil.process_iter() if proc.username() == 'vinish']
for proc in sorted(matching, key=lambda p: p.pid):
    print(proc)

有关每个proc对象提供的信息和功能方式的详细信息,请参阅psutil.Process() class documentation