2010-08-07 5 views
16

Comment utiliser Python pour déterminer quels programmes sont en cours d'exécution. Je suis sur Windows.Détermination des programmes en cours d'exécution en Python

+3

Hey! Bienvenue à StackOverflow! Ce serait très utile si vous avez posté des choses que vous avez essayées mais qui n'ont pas fonctionné pour vous. Cela permet aux personnes qui répondent aux questions de savoir ce que vous rencontrez des problèmes. Bonne chance avec votre question! –

Répondre

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

maintenant plist contient une liste séparée par des espaces de processus formaté:

  • La première colonne correspond au nom du fichier exécutable qui exécute
  • La deuxième colonne est la commande qui représente le fonctionnement processus
  • la troisième colonne est le processus ID

Cela devrait être simple à p cul avec python. Notez que la première ligne de données sont des étiquettes pour les colonnes, et non des processus réels.

Notez que cette méthode ne fonctionne que sur Windows!

+1

Merci, WMIC a bien fonctionné. Malheureusement, le fichier texte en sortie n'était pas si facile à analyser. Il est en UTF-16 donc j'ai dû le décoder et le ré-encoder en ASCII pour analyser facilement en utilisant if (processName dans procList): return true – Murkantilism

24

Merci à @ hb2pencil pour la commande WMIC! Voici comment vous pouvez diriger la sortie sans fichier:

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

informations Piping de processus sous commandes n'est pas idéal par rapport à un outil python réel destiné à l'exécution du processus. Essayez le module psutil. Pour obtenir une liste des numéros de processus, faire:

psutil.get_pid_list() 

Je crains que vous devez télécharger ce module en ligne, il est pas inclus dans les distributions de python, mais cela est une meilleure façon de résoudre votre problème. Pour accéder au nom du processus, vous avez un numéro pour, faites:

psutil.Process(<number>).name 

Cela devrait être ce que vous cherchez. De plus, voici un moyen de trouver si un processus spécifique est en cours d'exécution:

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 

Il utilise le nom du fichier exécutable, de sorte que, par exemple, pour trouver une fenêtre PowerShell, vous feriez ceci:

process_exists("powershell.exe") 
+0

get_pid_list() est obsolète, utilisez pids() à la place – jake77

+0

J'ai fait quelques tests et pour moi sur win10 psutil prend environ 10 fois plus pour effectuer la même tâche que WMIC – user2145184

3

Je recevais un accès refusé avec get_pid_list(). Une nouvelle méthode a fonctionné pour moi sur Windows et 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" 
Questions connexes