在 Python 中启动 wmic 作为子进程来收集数据的更快替代方案?

问题描述 投票:0回答:1

我编写了一个程序,可以从运行它的任何机器中提取各种数据片段,但我在使用其中内置的特定查询时遇到了一些问题。这一行[正确]查询机器上已安装的产品,但运行大约需要 10-15 秒。有没有更好的方法来写这一行?我们的目标是简单地收集名字......它会......慢慢地。

wmicData=subprocess.check_output(['wmic','product','get','name'])

它完成了这项工作,我只是不确定如何让它更快......如果单独使用 Python 就可以做到这一点。

python windows performance wmic
1个回答
0
投票

这里有几个使用 Python 来安装软件的示例

import wmi
import win32api
import win32con

# Version 1 WMI
c = wmi.WMI()
for s in c.query('SELECT * from Win32_Product'):
    print(s.Name)

# Version 2 Registry
index = 0
key = win32api.RegOpenKey(win32con.HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall')
while True:
    subkeyname = win32api.RegEnumKey(key, index)
    index += 1
    subkey = win32api.RegOpenKey(key, subkeyname)
    try:
        val = win32api.RegQueryValueEx(subkey, 'DisplayName')
        if val[0]:
            print(val[0])
    except:
        pass

我将留给您进行适当的错误处理,选择您想要的属性值等

对于注册表版本,对于 32 位安装程序,您必须重复使用

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
,对于用户级安装可能需要使用
HKEY_CURRENT_USER
变体。

© www.soinside.com 2019 - 2024. All rights reserved.