python - 通过 Python 子进程模块在 shell 中进行管道传输

标签 python shell subprocess pipe

所以我试图在给定机器上查询前 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/

相关文章:

ruby - 这个 Ruby 代码和 shell 代码有什么区别?

shell - 在 shell 中并行化多个相似程序实例的最佳方法是什么?

shell - Oozie 工作流 : is it possible to get environment variable value through EL function

python - Subprocess.poll() 错误地返回一个值

python - 从存档文件中有条件提取文件

Python 比较列表与字典值

python - 保留文本结构信息 - pyparsing

javascript - 编译时出现 block 状错误

Python 子进程 popen 管道

python - 使用标准 python 库输入 ssh 密码(不是 pexpect)