2010-08-07 7 views
16

¿Cómo usaría Python para determinar qué programas se están ejecutando actualmente? Estoy en Windows.Determinación de programas en ejecución en Python

+3

¡Hola! Bienvenido a StackOverflow! Sería muy útil si publicaras cosas que has intentado pero que no han funcionado para ti. Esto permite que las personas que responden preguntas sepan con qué están teniendo problemas. Buena suerte con tu pregunta! –

Respuesta

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

Ahora PLIST contiene una lista formateada por espacios en blanco separado de los procesos:

  • La primera columna es el nombre del ejecutable que ejecuta
  • La segunda columna es el comando que representa el funcionamiento proceso
  • la tercera columna es el ID de proceso

Esto debería ser fácil de p culo con python. Tenga en cuenta que la primera fila de datos son etiquetas para las columnas y no procesos reales.

¡Tenga en cuenta que este método solo funciona en Windows!

+1

Gracias, WMIC funcionó bien. Desafortunadamente, el archivo de texto de salida no era tan fácil de analizar. Está en UTF-16 así que tuve que decodificarlo y recodificarlo como ASCII para analizar fácilmente usando if (processName en procList): return true – Murkantilism

24

¡Gracias a @ hb2pencil por el comando WMIC! He aquí cómo se puede canalizar la salida sin un archivo:

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

información de tuberías de proceso de sub comandos no es ideal en comparación con una herramienta pitón real significado para conseguir procesos. Pruebe el módulo psutil. Para obtener una lista de números de proceso, hacer:

psutil.get_pid_list() 

Me temo que usted tiene que descargar este módulo en línea, que no está incluido en las distribuciones de Python, pero esta es una mejor manera de resolver su problema. Para acceder al nombre del proceso para el que tiene número, haga:

psutil.Process(<number>).name 

Esto debería ser lo que está buscando. Además, aquí es una manera de encontrar si un proceso específico se está ejecutando:

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 

Este utiliza el nombre del archivo ejecutable, por lo que, por ejemplo, para encontrar una ventana de PowerShell, que podría hacer esto:

process_exists("powershell.exe") 
+0

get_pid_list() está en desuso, use pids() en su lugar – jake77

+0

Hice algunas pruebas y para mí en win10, el psutil toma aproximadamente 10 veces más tiempo para realizar la misma tarea que las tuberías WMIC – user2145184

3

obtenía acceso denegado con get_pid_list(). Un método más nuevo funcionó para mí en Windows y 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" 
Cuestiones relacionadas