gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:04:19 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com