2010-01-18 6 views
3

J'ai besoin d'un script qui vérifie si un processus particulier est en cours d'exécution et retourne quelque chose s'il n'est pas trouvé. Je sais que cela peut être fait en utilisant un sous-processus, mais y a-t-il une façon plus simple de le faire?Gestion de processus Windows utilisant Python

Répondre

6

Sous Windows, vous pouvez utiliser WMI:

import win32com.client 

def find_process(name): 
    objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator") 
    objSWbemServices = objWMIService.ConnectServer(".", "root\cimv2") 
    colItems = objSWbemServices.ExecQuery(
     "Select * from Win32_Process where Caption = '{0}'".format(name)) 
    return len(colItems) 

print find_process("SciTE.exe") 
+1

Le module wmi rendra cela encore plus facile. http://timgolden.me.uk/python/wmi/index.html C'est un wrapper léger autour de win32com – codeape

+0

Pourquoi prendre la peine de récupérer toute la liste des processus, lorsque l'instruction 'Select' vous permettra de pré-filtrer sur le' Caption '? Comme ceci: '" Sélectionnez * de Win32_Process où Caption = 'SciTE.exe' "' –

+0

Oui c'est une bonne suggestion. J'ai mis à jour ma réponse – luc

1

Pour des raisons similaires, je l'ai utilisé psutil bibliothèque. Quelques conseils:

    processus de liste
  • avec psutil.pids() (reference)
  • inspectent traiter l'information avec process = psutil.Process(pid) (reference)
  • do process.kill ou process.terminate()

Installation sur les fenêtres - pip fera l'installation de la source (ce qui signifie la compilation), donc vous voulez probablement télécharger l'installation binaire de https://pypi.python.org/pypi/psutil/#downloads