在64位Windows上列出正在运行的进程

我amm写一个小的python脚本,将从我正在运行的Windows虚拟机中获取信息。

目前我可以使用以下方法在32位XP机器上列出进程:

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

是否有可能以某种方式检测正在运行的Windows版本,并执行一个不同的方法来获取64位机器上的进程,我试图从64位Vista和64位Windows 7获得进程。

有任何想法吗?

在activestate上有另外一个做类似的事情,但使用性能数据助手库(PDH)来代替。

我已经在我的Windows 7 64位机器上testing过了,它在那里工作 – 所以大致相同的function可以在32位和64位窗口上工作。

你可以在这里find配方: http : //code.activestate.com/recipes/303339/

另一种方法是使用WMI,在Python中有一个使用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 

如果你不想依赖任何额外安装的模块,那么你可以parsingwmic的输出,例如:

 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 ... 

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

为了类似的目的,我使用了psutil库。 一些提示:

  • 使用psutil.pids()列出进程psutil.pids() ( 参考 )
  • process = psutil.Process(pid) ( 引用 )检查进程信息
  • process.killprocess.terminate()

在windows上安装 pip将从源代码(这意味着编译)进行安装,所以你可能想从https://pypi.python.org/pypi/psutil/#downloads下载二进制安装。;

我发现解决这个问题最简单的方法是使用Robert Lujo推荐的psutil库:

 psutil.process_iter() 

请注意,它返回一个生成器对象,一次发出一个过程对象。 例如,如果您需要进程名称列表,您可以执行如下操作:

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

您应该能够通过在每个虚拟机中公开Windows Management Instrumentation来实现这一点。 此工具可让您访问一系列系统数据,包括进程,请参阅http://technet.microsoft.com/en-us/library/cc757287%28WS.10%29.aspx

你应该能够在上面的链接中的一个命令,以获得你正在寻找的信息。