所以我试图在给定机器上查询前 3 个 CPU“密集型”进程,我发现这个 shell 命令可以做到这一点:ps -eo pcpu,pid,user,args |排序-k 1 -r |头-3
我想在 Python 脚本中使用这些数据,所以我需要能够通过 subprocess
模块捕获上述命令的输出。以下有效,但只返回一个巨大的字符串,因为我没有将它限制在前 3 个:
psResult = subprocess.check_output(['ps', '-eo', 'pcpu,user,args'])
我不太确定这个 subprocess.check_output
是如何工作的.. 我试了一下:
subprocess.check_output(['ps', '-eo', 'pcpu,user,args', '|', 'sort', '-k', '1', '-r', '|', '头', '-3'])
这给我一个错误:ps: illegal argument: |
我如何在 Python 中使用管道 |
符号,或使用其他方式进行排序,而不必对 psResult = subprocess 返回的巨大字符串进行大量解析.check_output(['ps', '-eo', 'pcpu,user,args'])
?
谢谢! 问候, -构造
最佳答案
您可以传递 shell=True
参数来执行纯 shell 命令:
import subprocess
subprocess.check_output('ps -eo pcpu,pid,user,args | sort -k 1 -r | head -3',
shell=True)
或者,使用 ps 的排序选项和 Python 的内置字符串函数,如下所示:
raw = subprocess.check_output('ps -eo pcpu,pid,user,args --sort -pcpu')
first_three_lines = list(raw.split('\n'))[:3]
关于python - 通过 Python 子进程模块在 shell 中进行管道传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10405515/