Как исключить некоторые процессы при использовании команды PS

Я пытаюсь разработать Диспетчер задач для своего персонального использования с помощью python3. В моем коде я использую эту команду для списка всего рабочего процесса в некоторое время цикле

ps -eo pid,comm,user,%mem,%cpu | awk '{$4=<Variablehere>*$4/100;}{print;}'

но каждый раз, когда это выполняется, существует три процесса, я не хочу, чтобы они были перечислены, которые являются sh ps awk

таким образом, мой вопрос, как я могу получить PIDs этих процессов так, чтобы я мог позже избавиться от них из списка

спасибо

[Править]

import subprocess
from time import sleep

class processData : def init (self) : mem = next(self._run_command("m")).decode('utf-8').replace("\n","") mem = str(int(float(mem)/1024)) #print(mem)

self.allprocess = "ps -eo pid,comm,user,%mem,%cpu | awk '{$4="+mem+"*$4/100;}{print;}';" self.ownprocess = "ps -eo pid,comm,user,%mem,%cpu | awk '{$4=(" + mem + "*$4/100);}{print;}' | grep $USER" self.otherprocess = "ps -eo pid,comm,user,%mem,%cpu | awk '{$4=(" + mem + "*$4/100);}{print;}' | grep -v $USER" def _run_command(self,fil): if fil == "a" : command = self.allprocess elif fil == "u" : command = self.ownprocess elif fil == "o" : command = self.otherprocess elif fil == "m" : command = "awk '/MemTotal/ {print $2}' /proc/meminfo" p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) for line in iter(p.stdout.readline, b''): if line: yield line while p.poll() is None: sleep(.1) err = p.stderr.read() if p.returncode != 0: print("Error: " + str(err)) @staticmethod def unique(list1 , list2) : ids = [i[0] for i in list2] return [i for i in list1 if i[0] not in ids]; def get(self,choice) : processes = []; for process in self._run_command(choice) : processes.append(process.decode('utf-8').replace("\n","").split()); return processes#[0:(len(processes)-1)-2]; print(processData().get("a"));

То, что я хочу, не должно перечислять процессы, который работает из-за выполнения моей программы

1
задан 30 September 2018 в 19:26

1 ответ

Просто вставьте условие $2 !~ /^(awk|sh|ps)$/:

ps -eo pid,comm,user,%mem,%cpu | awk '$2 !~ /^(awk|sh|ps)$/ {$4=<Variablehere>*$4/100;}{print;}'

Это означает, "если 2$ не соответствуют, запускаются из строки, сопровождаемый также awk, sh, или ps, сопровождаемый к концу строки" затем...

0
ответ дан 7 December 2019 в 23:05

Другие вопросы по тегам:

Похожие вопросы: