2009-10-27 12 views
5

Estoy escribiendo un pequeño script de python que tomará información de las máquinas virtuales de Windows que estoy ejecutando.Lista de procesos en ejecución en Windows de 64 bits

Por el momento puedo hacer una lista de 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 alguna manera la versión de Windows que se ejecuta y excute un método diferente para conseguir el procesos en una máquina de 64 bits, estoy tratando de obtener los procesos de un 64 bits Vista y 64 bits Windows 7.

¿Alguna idea?

Respuesta

15

Hay otra receta en activestate que hace algo similar, pero utiliza la biblioteca de ayuda de datos de rendimiento (PDH) en su lugar.

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

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

Otro método es mediante 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 
+0

WMI funciona bien para este –

+0

¿WMI funciona también en las ventanas de 64 bits? No puedo ver nada en el sitio que menciona 64 bits, ¿o usa los mismos nombres de método? – RailsSon

+0

Debería funcionar de la misma manera (incluido el método) nombres para ambos entornos. –

0

Debería poder hacer esto al exponer Windows Management Instrumentation dentro de cada máquina virtual. Esta herramienta le da acceso a un conjunto de datos del sistema, incluidos los procesos, consulte http://technet.microsoft.com/en-us/library/cc757287%28WS.10%29.aspx

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

+1

Es mucho mejor usar una herramienta como win32process o psutils de lo que es la salida del tubo de un comando de línea de comandos. Algo que se integre intencionalmente con python siempre será más fácil y más limpio de usar. –

6

para fines similares que he utilizado psutil biblioteca. Algunos consejos:

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

Installation en las ventanas - pip va a hacer la instalación de la fuente (lo que significa compilación), por lo que probablemente desee descargar la instalación binaria desde https://pypi.python.org/pypi/psutil/#downloads.

+5

psutil limita su salida de procesos al usuario actual que ejecuta el script python. Por lo tanto, un usuario que no sea administrador no verá los procesos privilegiados. – rosch

1

La manera más limpia que he encontrado para resolver este era utilizar la biblioteca psutil según lo recomendado por Robert lujo:

psutil.process_iter() 

Observe que devuelve un objeto generador, la emisión de un objeto de proceso a la vez. Por ejemplo, si usted necesita la lista de los nombres de los procesos, se puede hacer algo como:

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

hola, esa es agradable, solo una pregunta, como p es un proceso con pid y nombre, ¿por qué p.name() con corchetes? y ¿por qué no funciona si quiero obtener los pids? Estoy tratando de obtener el pid/nombre correspondiente –

Cuestiones relacionadas