Lista de procesos en ejecución en Windows de 64 bits

Estoy escribiendo un pequeño script en python que recostackrá información de las máquinas virtuales de Windows que estoy ejecutando.

En este momento puedo listar los procesos en una máquina de 32 bits XP con el siguiente método:

http://code.activestate.com/recipes/305279/

¿Es posible detectar de algún modo la versión de Windows que se está ejecutando y extraer un método diferente para obtener los procesos en una máquina de 64 bits? Estoy tratando de obtener los procesos desde una Vista de 64 bits y Windows 7 de 64 bits.

¿Algunas ideas?

Hay otra receta en el estado activo que hace algo similar, pero en su lugar utiliza la biblioteca de ayudante de datos de rendimiento (PDH).

He probado esto en mi máquina con Windows 7 de 64 bits y funciona allí, por lo que presumiblemente la misma función funcionará tanto en ventanas de 32 bits como de 64 bits.

Puede encontrar la receta aquí: http://code.activestate.com/recipes/303339/

Otro método es usar WMI, hay un ejemplo aquí en Python usando el módulo wmi :

http://timgolden.me.uk/python/wmi/cookbook.html

import wmi c = wmi.WMI () for process in c.Win32_Process (): print process.ProcessId, process.Name 

Si no desea confiar en ningún módulo adicional instalado, puede analizar la salida de wmic , por ejemplo:

 c:\> wmic process get description,executablepath ... explorer.exe C:\Windows\explorer.exe cmd.exe C:\Windows\SysWOW64\cmd.exe conhost.exe C:\Windows\system32\conhost.exe ... 

Referencia: http://geekpedia.wordpress.com/2008/08/18/use-command-line-to-track-windows-processes/

Para propósitos similares he usado la librería psutil . Algunos consejos:

  • psutil.pids() procesos con psutil.pids() ( referencia )
  • inspeccionar la información del proceso con process = psutil.Process(pid) ( referencia )
  • hacer process.kill o process.terminate()

La instalación en windows – pip realizará la instalación desde la fuente (lo que significa comstackr), por lo que probablemente desee descargar una instalación binaria desde https://pypi.python.org/pypi/psutil/#downloads .

La forma más limpia que encontré para resolver esto fue usar la biblioteca psutil recomendada por Robert Lujo:

 psutil.process_iter() 

Tenga en cuenta que devuelve un objeto generador, emitiendo un objeto de proceso a la vez. Por ejemplo, si necesita la lista de nombres de proceso, puede hacer algo como:

 [p.name() for p in psutil.process_iter()] 

Debería poder hacer esto exponiendo el Instrumental de administración de Windows dentro de cada VM. Esta herramienta le brinda acceso a una gran cantidad de datos del sistema, incluidos los procesos, consulte http://technet.microsoft.com/en-us/library/cc757287%28WS.10%29.aspx

Debería poder popen uno de los comandos en el enlace anterior para obtener la información que está buscando.