2010-08-07 2 views
16

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

+3

Эй! Добро пожаловать в StackOverflow! Было бы очень полезно, если бы вы разместили вещи, которые вы пробовали, но не сработали для вас. Это позволяет людям, отвечающим на вопросы, знать, с чем вы столкнулись. Удачи с вашим вопросом! –

ответ

11
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 содержит форматированную разделенных пробелами список процессов:

  • Первый столбец представляет собой имя исполняемого файла, который работает под управлением
  • второй колонке команду, которая представляет ход процесс
  • Третий столбец представляет собой идентификатор процесса

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

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

+1

Спасибо, WMIC хорошо работал. К сожалению, выходного текстового файла было не так просто разобрать. Это в UTF-16, поэтому мне пришлось декодировать и перекодировать его как ASCII, чтобы легко анализировать использование if (processName в procList): return true – Murkantilism

24

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

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

psutil.get_pid_list() 

Я боюсь, что вы должны загрузить этот модуль в Интернете, это не входит в дистрибутивы питона, но это лучший способ, чтобы решить вашу проблему. Чтобы получить доступ к названию процесса, у вас есть номер для, 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") 
+0

get_pid_list() устарел, используйте pids() вместо – jake77

+0

Я провел некоторое тестирование и для меня на win10 psutil занимает примерно 10 раз дольше, чтобы выполнить ту же задачу, что и трубопровод WMIC – user2145184

3

Мне было отказано в доступе с помощью 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" 
Смежные вопросы