Просто попробуйте это:
Если вы собираетесь сделать все это с помощью большой команды оболочки, просто добавьте аргумент -c в grep, чтобы он подсчитывал количество строк вместо реальных строк.:
ps uaxw |grep python |grep -v grep
Конечно, вы можете сделать это более сложным, добавив |wc -l до конца или путем подсчета строк в Python, но почему?
В качестве альтернативы, зачем вообще задействовать оболочку?Вы можете выполнять поиск в Python так же легко, как и запускать grep, и тогда у вас не будет проблемы с тем, что вы случайно создали процесс grep, который ps будет повторять в соответствии с вашим поиском, а затем нужно будет выполнить grep -v его обратно:
procs = subprocess.check_output(['ps', 'uaxw']).splitlines()
kms_procs = [proc for proc in procs if 'kms' in proc]
count = len(kms_procs)
Или, проще говоря, не просите ps дать вам целую кучу информации, которая вам не нужна, а затем выясните, как ее игнорировать, просто попросите информацию, которую выwant:
procs = subprocess.check_output(['ps', '-a', '-c', '-ocomm=']).splitlines()
count = procs.count('kms')
Или, что еще проще, установите psutil и даже не пытайтесь запускать подпроцессы и анализировать их вывод:
count = sum(1 for proc in psutil.process_iter() if proc.name() == 'kms')