尝试使用wmi对象(python)时出错

尝试使用wmi对象(python)时出错,python,wmi,Python,Wmi,我正在尝试编写一个脚本来检测运行脚本的机器是虚拟机还是物理机,但我不了解错误以及如何修复它 import wmi def sys_info(): objWMIService = wmi.GetObject("winmgmts:\root\cimv2") colItems = objWMIService.ExecQuery("Select * from Win32_BaseBoard") for objItem in colItems: print "

我正在尝试编写一个脚本来检测运行脚本的机器是虚拟机还是物理机,但我不了解错误以及如何修复它

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)
回溯(最近一次呼叫最后一次):
文件“C:\Documents and Settings\xxx\Desktop\Python\Practice Code\System information\trial.py”,第16行,在
系统信息
文件“C:\Documents and Settings\xxx\Desktop\Python\Practice Code\System information\trial.py”,第5行,在sys\u info中
objWMIService=wmi.GetObject(“winmgmts:\root\cimv2”)
文件“C:\Python26\lib\site packages\win32com\client\\uuuu init\uuuu.py”,第72行,在GetObject中
返回名字对象(路径名,clsctx)
名字对象中第87行的文件“C:\Python26\lib\site packages\win32com\client\\uuuuu init\uuuuu.py”
名字对象,i,bindCtx=pythoncom.MkParseDisplayName(路径名)
com_错误:(-2147217375,'OLE错误0x80041021',无,无)

我希望有人能帮上忙,我对python很陌生。谢谢。

如果你改变了,事情会有所改善吗:

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

“\root”中的“\r”序列将被解释为代码中的
字符。您要么必须将“\”加倍以转义它们,这样它们将被视为反斜杠,要么在第一个双引号前面加上“r”(正如我所做的),以向Python指示这应该是一个“原始”字符串文字。原始字符串与常规字符串没有什么不同,但是原始字符串语法告诉Python编译器不要解释反斜杠

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