我目前运行:
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/