Déterminer les programmes en cours d’exécution en Python

Comment pourrais-je utiliser Python pour déterminer quels programmes sont en cours d’exécution. Je suis sur Windows

Merci à @ hb2pencil pour la commande WMIC! Voici comment vous pouvez canaliser 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 
 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 de processus séparés par des espaces:

  • La première colonne est le nom de l’exécutable en cours d’exécution
  • La deuxième colonne est la commande qui représente le processus en cours d’exécution
  • La troisième colonne est l’ID du processus

Cela devrait être simple à parsingr avec python. Notez que la première ligne de données est constituée d’étiquettes pour les colonnes et non de processus réels.

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

Les informations de tuyauterie provenant des commandes de sous-processus ne sont pas idéales par rapport à un outil python réel destiné à obtenir des processus. Essayez le module psutil. Pour obtenir une liste des numéros de processus, procédez comme suit:

 psutil.get_pid_list() 

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

 psutil.Process().name 

Cela devrait être ce que vous recherchez. En outre, voici un moyen de savoir 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 

Cela utilise le nom du fichier exécutable, par exemple, pour trouver une fenêtre PowerShell, procédez comme suit:

 process_exists("powershell.exe") 

Je recevais un access 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"