使用WMI对象时出现错误(python)

3 投票
1 回答
4664 浏览
提问于 2025-04-16 12:55

我正在尝试写一个脚本,用来判断运行这个脚本的机器是虚拟机还是实体机,但我不太明白出现的错误是什么,也不知道该怎么修复。

import wmi

def sys_info():

    objWMIService = wmi.GetObject("winmgmts:\root\cimv2")
    colItems = objWMIService.ExecQuery("Select * from Win32_BaseBoard")

    for objItem in colItems:
        print "inside"
        Manufacturer = objItem.Manufacturer
        if Manufacturer == "Microsoft Corporation":
            print "Virtual Machine"
        else:
            print "Not in one"

错误信息:

    Traceback (most recent call last):
  File "C:\Documents and Settings\xxx\Desktop\Python\Practice Code\System information\trial.py", line 16, in <module>
    sys_info()
  File "C:\Documents and Settings\xxx\Desktop\Python\Practice Code\System information\trial.py", line 5, in sys_info
    objWMIService = wmi.GetObject("winmgmts:""\root\cimv2")
  File "C:\Python26\lib\site-packages\win32com\client\__init__.py", line 72, in GetObject
    return Moniker(Pathname, clsctx)
  File "C:\Python26\lib\site-packages\win32com\client\__init__.py", line 87, in Moniker
    moniker, i, bindCtx = pythoncom.MkParseDisplayName(Pathname)
com_error: (-2147217375, 'OLE error 0x80041021', None, None)

我希望有人能帮帮我,我对Python还很陌生。谢谢。

1 个回答

6

如果你把这个:

objWMIService = wmi.GetObject("winmgmts:\root\cimv2") 

改成这个:

objWMIService = wmi.GetObject(r"winmgmts:\root\cimv2") 

在字符串'\root'中,'\r'会被你的代码当作一个<CR>字符来处理。你要么需要把反斜杠'\'写两次,这样它们就会被当作普通的反斜杠来处理,要么在第一个双引号前加个'r'(就像我这样做的),告诉Python这应该是一个“原始”字符串。原始字符串和普通字符串没有区别,但原始字符串的写法告诉Python编译器不要去解释反斜杠。

撰写回答