Determinación de progtwigs en ejecución en Python

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

Gracias a @ hb2pencil por el comando WMIC! Aquí es cómo 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 
 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 de procesos separados por espacios en blanco formateados:

  • La primera columna es el nombre del ejecutable que se está ejecutando.
  • La segunda columna es el comando que representa el proceso en ejecución.
  • La tercera columna es el ID del proceso.

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

Tenga en cuenta que este método solo funciona en windows!

La información de tuberías de los subprocesos no es ideal en comparación con una herramienta real de python diseñada para obtener procesos. Prueba el módulo psutil. Para obtener una lista de números de proceso, haga:

 psutil.get_pid_list() 

Me temo que tiene que descargar este módulo en línea, 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 un número, haga:

 psutil.Process().name 

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

 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 

Esto usa el nombre del archivo ejecutable, así que, por ejemplo, para encontrar una ventana de powershell, harías esto:

 process_exists("powershell.exe") 

Estaba obteniendo acceso denegado con get_pid_list (). Un método más nuevo me funcionó 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"