Подпроцесс PID на Windows - PullRequest
       7

Подпроцесс PID на Windows

0 голосов
/ 25 апреля 2020

Как мне получить PID подпроцесса, открытого с shell = True в Windows ОС? Я пытаюсь запустить несколько команд таким образом, используя для l oop, принимая их в качестве аргументов - запуск их работает нормально. Однако PID, возвращаемый из procName.pid, не совпадает с PID списка задач. Например:

pidDict = {}
for proc in argsPassed:
    p = subprocess.Popen(proc, shell=True)
    pidDict[proc] = p.pid

Сравнение pidDict с PID моих процессов в списке задач не совпадает, даже не близко. Мне нужно следить за ними, чтобы потом их убить. Любой совет? Спасибо.

1 Ответ

0 голосов
/ 26 апреля 2020

Мне удалось сделать это хакерским способом, но это сработает только в том случае, если вы знаете, что во время выполнения сценария не будет открыто ни одного другого процесса с таким же именем изображения. В моем случае это было нормально, потому что я искал q.exe процессы, и это было только на моей локальной машине. Код, который работает:

pidDict = {}
for proc in argsPassed:
     subprocess.Popen(proc, shell=True)
     time.sleep(1)
     p_list = subprocess.Popen(‘tasklist.exe /fo csv’, stdout=subprocess.PIPE, universal_newlines=True)

     for p in csv.DictReader(p_list.stdout):
          if (p[‘Image Name’] == ‘q.exe’) and (p[‘PID’] not in pidDict.values()):
              pidDict[i] = p[‘PID’]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...