Определение запущенных программ на Python - PullRequest
17 голосов
/ 07 августа 2010

Как бы я использовал Python, чтобы определить, какие программы запущены в данный момент.Я на Windows.

Ответы [ 4 ]

25 голосов
/ 27 июля 2011

Спасибо @ hb2pencil за команду WMIC! Вот как вы можете передать вывод без файла:

import subprocess
cmd = 'WMIC PROCESS get Caption,Commandline,Processid'
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
for line in proc.stdout:
    print line
11 голосов
/ 07 августа 2010
import os
os.system('WMIC /OUTPUT:C:\ProcessList.txt PROCESS get Caption,Commandline,Processid')
f = open("C:\ProcessList.txt")
plist = f.readlines()
f.close()

Теперь plist содержит отформатированный список процессов, разделенных пробелами:

  • Первый столбец - это имя исполняемого файла, который запускается
  • Второй столбец - это команда, представляющая запущенный процесс
  • Третий столбец - это идентификатор процесса

Это должно быть просто для анализа с python. Обратите внимание, что первая строка данных является метками для столбцов, а не фактическими процессами.

Обратите внимание, что этот метод работает только в Windows!

7 голосов
/ 20 декабря 2013

Передача информации из команд подпроцесса не идеальна по сравнению с реальным инструментом Python, предназначенным для получения процессов. Попробуйте модуль psutil. Чтобы получить список номеров процессов, выполните:

psutil.get_pid_list()

Боюсь, вам нужно скачать этот модуль онлайн, он не включен в дистрибутивы Python, но это лучший способ решить вашу проблему. Чтобы получить доступ к названию процесса, для которого у вас есть номер, выполните:

psutil.Process(<number>).name

Это должно быть то, что вы ищете. Кроме того, вот способ узнать, выполняется ли определенный процесс:

def process_exists(name):
    i = psutil.get_pid_list()
    for a in i:
        try:
            if str(psutil.Process(a).name) == name:
                return True
        except:
            pass
    return False

Здесь используется имя исполняемого файла, поэтому, например, чтобы найти окно powershell, вы должны сделать следующее:

process_exists("powershell.exe")
5 голосов
/ 06 июня 2015

Мне было отказано в доступе с помощью get_pid_list ().Более новый метод работал для меня в Windows и OSX:

import psutil

for proc in psutil.process_iter():
    try:
        if proc.name() == u"chrome.exe":
            print(proc)
            print proc.cmdline()
    except psutil.AccessDenied:
        print "Permission error or access denied on process"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...