python - 有什么方法可以收集进程信息吗?

标签 python linux bash

我目前运行:

ps -f -u vinish | sort -k5

但是如何在 Python 中执行此操作而不在代码中编写相同的带引号的命令?

为了执行 bash 命令,我使用 os.system('<cmd>')或调用subprocess ,但我正在寻找其中不包含任何 bash 命令的东西。

最佳答案

您可以对 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)

请参阅psutil.Process() class documentation了解每个 proc 对象以信息和功能的方式提供的详细信息。

关于python - 有什么方法可以收集进程信息吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28789258/

相关文章:

python - 无法使用 sys.argv --bind 运行 Gunicorn

android - Bash 找不到 adb,即使它确实存在

linux - connect() 与 unix 域套接字和完整积压

用于从 GitHub 下载最新版本的 Bash 脚本

python - Tkinter 弹出窗口中的小部件从另一个窗口中的小部件获取 Tab 焦点

python - 为文本文件中的每一行创建一个新列表?

python - 为条件频率分布创建标记和文本的元组

linux - 哪个 Linux 进程处理系统调用?

regex - awk 删除数字后的字符

linux - (标准输入) 1 : syntax error when bc within if