Как я могу использовать Python для определения того, какие программы в настоящее время работают. Я нахожусь в Windows.
Определение запуска программ в Python
Ответ 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"