Подтвердить что ты не робот

Определение запуска программ в Python

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

4b9b3361

Ответ 1

Благодаря @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

Ответ 2

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. Обратите внимание, что первая строка данных - это метки для столбцов, а не фактические процессы.

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

Ответ 3

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

psutil.get_pid_list()

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

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")

Ответ 4

Мне было отказано в доступе с помощью get_pid_list(). Более новый метод работал у меня в окнах и 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"