我正在编写一个小的Python脚本,它将获取我运行的Windows虚拟机中的信息。
目前,我可以通过以下方法列出32位XP计算机上的进程:
http://code.activestate.com/recipes/305279/
是否有可能在检测到运行的Windows版本后执行不同的方法来获取64位机器上的进程?我正在尝试获取64位Vista和64位Windows 7上的进程。
有任何想法吗?
我正在编写一个小的Python脚本,它将获取我运行的Windows虚拟机中的信息。
目前,我可以通过以下方法列出32位XP计算机上的进程:
http://code.activestate.com/recipes/305279/
是否有可能在检测到运行的Windows版本后执行不同的方法来获取64位机器上的进程?我正在尝试获取64位Vista和64位Windows 7上的进程。
有任何想法吗?
如果你不想依赖任何额外安装的模块,那么你可以解析wmic的输出结果,例如:
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/
这里有另外一个使用 Performance Data Helper 库 (PDH) 来实现类似功能的方案。
我已在 Windows 7 64位系统上测试通过,因此应该该函数适用于32位和64位的Windows。
你可以在这里找到该方案: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
我找到了最干净的解决方法,就是使用psutil库,正如Robert Lujo所推荐的:
psutil.process_iter()
请注意,它返回一个生成器对象,一次发出一个进程对象。例如,如果您需要进程名称列表,可以执行以下操作:
Note that it returns a generator object, issuing a process object at a time. For example if you need the list of process names, you can do something like:
[p.name() for p in psutil.process_iter()]
为了类似的目的,我使用了psutil库。一些提示:
psutil.pids()
列出进程(参考文献)process = psutil.Process(pid)
检查进程信息(参考文献)process.kill
或process.terminate()
安装在Windows上 - pip
将从源代码进行安装(这意味着编译),因此您可能需要从https://pypi.python.org/pypi/psutil/#downloads下载二进制安装包。
您应该能够通过在每个虚拟机中公开Windows Management Instrumentation来完成此操作。该工具使您可以访问一堆系统数据,包括进程,请参见http://technet.microsoft.com/en-us/library/cc757287%28WS.10%29.aspx
您应该能够popen
前面链接中的命令之一以获取您要查找的信息。
pip install wmi
似乎成功了,并且反映在链接网站上发布的版本。 - luckydonald