如何在Python中访问WMI?

6

所以我正在尝试从这里获取数据,并在Python中使用wmi访问它。正如您所看到的,它使用wmi。我之前曾经尝试过在python中使用wmi,但我无法解释他们给我的数据。请耐心等待我,因为我对wmi的工作方式很陌生。它说wmi数据存储在root/OpenHardwareMontor中,并且它使用两个不同的wmi类(Hardware和Sensor)。但是所有这些信息都超出了我的理解范围。

请问是否有人可以提供一些样本代码来读取其中的数据?例如,用于检查CPU核心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相关联的值,而忽略所有其他值?

1个回答

7
使用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 = ".......";
};

您可以通过以下方式访问每个:
myQuery = c.query(wql)
myQuery.Availability 

输出:

2

欲了解更多信息,请尝试使用 WMI 菜谱

编辑#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 它可以工作,但它打印出了每个温度传感器的名称/值。我怎样才能只获取一个单独的值呢? - ryan27968
@user1803425,你能把输出添加到你的帖子中吗? - Kobi K
当我在c.sensor()中运行温度时,它返回了以下内容: 已用空间37.6607666016 CPU核心#2温度56.0 CPU核心#1温度46.0 可用内存2.88618087769 CPU核心#2使用率2.30768918991 温度42.0 CPU总使用率2.30768918991 CPU核心#1使用率1463.296875 总线速度133.026992798 CPU核心#2使用率1463.296875 内存49.1727905273 已用内存2.79223632812 CPU核心#1使用率2.30768918991 - ryan27968
很难理解,你能更清楚地说明一下吗?请将数据添加到您的帖子中(使用编辑),而不要作为评论。 - Kobi K
好的。我已经在我的帖子中添加了这些信息。这有助于澄清我的意思吗? - ryan27968
@user1803425,你可以看到我的编辑... 你需要更多地了解Python中的字符串in - Kobi K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接