Конвейерная обработка в оболочке через модуль подпроцесса Python

Итак, я пытаюсь запросить 3 наиболее "интенсивных" процесса ЦП на данной машине, и я нашел эту команду оболочки, чтобы сделать это: ps -eo pcpu,pid,user,args | сортировать -k 1 -r | head -3

Я хочу использовать эти данные внутри скрипта Python, поэтому мне нужно иметь возможность захватывать вывод вышеуказанной команды через модуль subprocess. Следующее работает, но просто возвращает огромную строку, так как я не ограничиваю ее тремя верхними:

psResult = subprocess.check_output(['ps', '-eo', 'pcpu,user,args'])

Я не совсем понимаю, как работает этот subprocess.check_output.. с жалкой попыткой я попробовал:

subprocess.check_output(['ps', '-eo', 'pcpu, user,args', '|', 'sort', '-k', '1', '-r', '|', 'head', '-3'])

Что дает мне ошибку: ps: недопустимый аргумент: |

Как мне использовать символ вертикальной черты |внутри Python или использовать какой-либо другой способ сортировки без необходимости выполнять невероятное количество синтаксического анализа огромной строки, возвращаемой psResult = subprocess. check_output(['ps', '-eo', 'pcpu,user,args'])?

Спасибо! С уважением, -kstruct

6
задан adelbertc 1 May 2012 в 22:53
поделиться