【问题标题】:How to access wmi in python?如何在python中访问wmi?
【发布时间】:2014-01-12 13:56:07
【问题描述】:

所以我试图从here访问数据

在 Python 中。如您所见,它使用 wmi。我之前曾尝试在 python 中使用 wmi,但我无法解释他们给我的数据。请耐心等待我,因为我是 wmi 工作原理的菜鸟。它说 wmi 数据存储在 root/OpenHardwareMontor 中,并且它使用两个不同的 wmi 类(硬件和传感器)。但所有这些信息都超出了我的想象。

有人可以给我一些示例代码来从中读取一些数据吗?

例如,检查 cpu core 1 频率的代码。

编辑:我有点让它工作了。我运行这段代码:

for Temperature in c.sensor():
    print Temperature.identifier
    print Temperature.value

我明白了:

/hdd/0/load/0
37.6608924866
/intelcpu/0/temperature/1
53.0
/intelcpu/0/temperature/0
42.0
/ram/data/1
2.88324356079
/intelcpu/0/load/2
1.53846144676
/hdd/0/temperature/0
43.0
/intelcpu/0/load/0
2.30768918991
/intelcpu/0/clock/1
1463.29663086
/intelcpu/0/clock/0
133.02696228
/intelcpu/0/clock/2
1463.29663086
/ram/load/0
49.224521637
/ram/data/0
2.79517364502
/intelcpu/0/load/1
3.07692289352

我如何只请求与标识符 /intelcpu/0/temperature/1 关联的值而忽略所有其他值?

【问题讨论】:

    标签: python windows wmi openhardwaremonitor


    【解决方案1】:

    最简单的WMI使用示例:

    c = wmi.WMI()
    wql = "Select * From Win32_SerialPort"
    for item in c.query(wql):
        print item
    

    输出示例:

    instance of Win32_SerialPort
    {
        Availability = 2;
        Binary = TRUE;
        Caption = "SpectrumAnalyzer1 (COM15)";
        ConfigManagerErrorCode = 0;
        ConfigManagerUserConfig = FALSE;
        CreationClassName = "Win32_SerialPort";
        Description = "SpectrumAnalyzer1";
        DeviceID = "COM15";
        MaxBaudRate = 128000;
        MaximumInputBufferSize = 0;
        MaximumOutputBufferSize = 0;
        Name = "SpectrumAnalyzer1 (COM15)";
        OSAutoDiscovered = TRUE;
        PNPDeviceID = "USB\\VID_10C4&PID_ED00\\1269376";
        PowerManagementCapabilities = {1};
        PowerManagementSupported = FALSE;
        ProviderType = "RS232 Serial Port";
        SettableBaudRate = TRUE;
        SettableDataBits = TRUE;
        SettableFlowControl = TRUE;
        SettableParity = TRUE;
        SettableParityCheck = TRUE;
        SettableRLSD = TRUE;
        SettableStopBits = TRUE;
        Status = "OK";
        StatusInfo = 3;
        Supports16BitMode = FALSE;
        SupportsDTRDSR = TRUE;
        SupportsElapsedTimeouts = TRUE;
        SupportsIntTimeouts = TRUE;
        SupportsParityCheck = TRUE;
        SupportsRLSD = TRUE;
        SupportsRTSCTS = TRUE;
        SupportsSpecialCharacters = TRUE;
        SupportsXOnXOff = TRUE;
        SupportsXOnXOffSet = TRUE;
        SystemCreationClassName = "Win32_ComputerSystem";
        SystemName = ".......";
    };
    

    您可以通过以下方式访问每个item

    myQuery = c.query(wql)
    myQuery.Availability 
    

    输出:

    2
    

    有关详细信息,请尝试 WMI cookbook

    编辑#1:

    使用 if 语句和in 你可以做你想做的事。

    for Temperature in c.sensor():
        if "/intelcpu/0/temperature/1" in Temperature.identifier:
            print Temperature.identifier
            print Temperature.value 
    

    【讨论】:

    • 好吧,我用“cockbook”搞定了。我运行了这段代码: for Temperature in c.sensor(): print Temperature.name print Temperature.value 并且它有效,但它打印出每个温度传感器名称/值。我怎样才能只获取一个值?
    • @user1803425 您可以将输出添加到您的帖子中吗?
    • 当我在 c.sensor() 中运行温度时: print Temperature.name print Temperature.value 它返回 Used Space 37.6607666016 CPU Core #2 56.0 CPU Core #1 46.0 Available Memory 2.88618087769 CPU Core #2 2.30768918991 温度 42.0 CPU 总计 2.30768918991 CPU Core #1 1463.296875 总线速度 133.026992798 CPU Core #2 1463.296875 内存 49.1727905273 已用内存 2.792232812 CPU Core #1 2.30786
    • 很难理解,你能不能清楚点?将数据添加到您的帖子(使用编辑)而不是作为评论。
    • 好的。我已将信息添加到我的帖子中。这有助于澄清我在说什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多