【问题标题】:List running processes on 64-bit Windows列出 64 位 Windows 上正在运行的进程
【发布时间】:2010-12-10 13:46:41
【问题描述】:

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

目前我可以通过以下方法列出 32 位 XP 机器上的进程:

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

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

有什么想法吗?

【问题讨论】:

    标签: python windows process


    【解决方案1】:

    如果您不想依赖任何额外安装的模块,那么您可以解析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/

    【讨论】:

      【解决方案2】:

      关于 activestate 的另一种配方可以做类似的事情,但使用的是性能数据助手库 (PDH)。

      我已经在我的 Windows 7 64 位机器上进行了测试,它在那里工作 - 所以大概相同的功能可以在 32 位和 64 位窗口上工作。

      你可以在这里找到食谱:http://code.activestate.com/recipes/303339/

      另一种方法是使用 WMI,这里有一个使用 wmi 模块的 Python 示例:

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

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

      【讨论】:

      • WMI 是否也适用于 64 位窗口?我在该网站上看不到任何提及 64 位的内容,还是您使用相同的方法名称?
      • 这两种环境的工作方式(包括方法)名称应该相同。
      • 我一直在我的应用程序中使用此方法,但我们注意到触发此查找时出现显着的 CPU 峰值。我最初认为这是我正在使用的调度程序,但我开始注释掉代码,直到我深入到这个特定的代码。注释掉,没有明显的峰值。有什么想法吗?
      • 我应该添加 Jonathan Rocher 发布的方法没有这个问题,并且具有与平台无关的好处。
      • pip install wmi 似乎成功并反映了链接网站上的发布。
      【解决方案3】:

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

      psutil.process_iter()
      

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

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

      【讨论】:

      • 嗨,这很好,只是一个问题,因为 p 是一个带有 pid 和 name 的进程,为什么你会得到 p.name() 带括号?如果我想获得 pid,为什么它不起作用?我正在尝试获取匹配的 pid/名称
      【解决方案4】:

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

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

      Windows 上的Installation - pip 将从源代码进行安装(这意味着编译),因此您可能希望从 https://pypi.python.org/pypi/psutil/#downloads 下载二进制安装。

      【讨论】:

      • psutil 将其进程输出限制为运行 python 脚本的当前用户。因此,非管理员用户将看不到特权进程。
      【解决方案5】:

      您应该能够通过在每个 VM 中公开 Windows Management Instrumentation 来做到这一点。这个工具让你可以访问一堆系统数据,包括进程,见http://technet.microsoft.com/en-us/library/cc757287%28WS.10%29.aspx

      您应该能够popen上述链接中的命令之一来获取您正在寻找的信息。

      【讨论】:

      • 使用诸如 win32process 或 psutils 之类的工具比使用命令行命令的管道输出要好得多。有意与 python 集成的东西总是更容易使用。
      猜你喜欢
      • 1970-01-01
      • 2012-05-18
      • 2011-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-15
      相关资源
      最近更新 更多