当前位置: 首页 > 知识库问答 >
问题:

使用PythonCom.CounInitialize()和wmi时发生Win32异常

段溪叠
2023-03-14

我试图在Python3.4中创建一个ping服务器的函数。目前它只需要在Windows(可能是XP及以上)上工作。

我发现可以使用WMI Win32_PingStatus(Reference)类ping服务器,并编写了以下函数:

import sys

if sys.platform.startswith('win32'):
    import wmi
    import pythoncom


def ping(ip_address):
    """ Check if can ping ip address using OS ping tool"""
    if sys.platform.startswith('win32'):
        try:
            pythoncom.CoInitialize()
            c = wmi.WMI()
            status_code = c.Win32_PingStatus(address=ip_address)[0].StatusCode
            if status_code == 0:
                successful = True
            else:
                successful = False

            pythoncom.CoUninitialize()

        except wmi.x_wmi:
            # If WMI ping fails fallback
            pass

    else:
        raise NotImplementedError

    return successful

if __name__ == "__main__":
    ping("127.0.0.1")

当您可以ping IP时,它返回True,当您不能ping IP时,它返回false。然而,每次运行它时,我都会在末尾出现一系列错误:

Win32 exception occurred releasing IUnknown at 0x03140980
Win32 exception occurred releasing IUnknown at 0x031635d0
Win32 exception occurred releasing IUnknown at 0x03163560 

每次运行脚本时都会发生这种情况,尽管地址的前2个字节每次都会更改。最后2个字节始终保持不变。

我试着注释了代码的各个部分,并发现如果删除pythoncom.counInitialize(),就不会出现异常。我正在使用pythoncom.coinitialize()pythoncom.couninitialize(),因为我想在线程中html" target="_blank">调用函数,如下所述

我尝试添加print(pythoncom._GetInterfaceCount())以查看存在多少个接口,并注意到每次运行函数时,接口会增加6,然后偶尔减少,但不会经常减少,不过它们不会再减少到10以下。

有没有人知道为什么会出现这种异常,以及正确的处理方法是什么?

谢谢你

共有1个答案

闻安宜
2023-03-14

我想我已经设法解决了这个问题。看来您应该只在单独的线程中调用pythoncom.coinitialize(),因为pythoncom会在主线程http://docs.activestate.com/activepython/2.5/pywin32/pythoncom__coinitializeex_meth.html上自动调用它。

因此,我只是检查当前线程是否是主线程,如果是主线程,我就不调用pythoncom.coinitialize()pythoncom.couninitialize()

 类似资料:
  • 我通过Spring Boot中编写的侦听器使用JMS对象消息。我正在通过我的Camel应用程序将ObjectMessage发送到ActiveMQ队列,我正在Spring Boot应用程序中的侦听器类中侦听队列。 代码: 这是我的POJO类: 在ActiveMQ队列中,我收到的消息为: 我在Spring Boot中的JMS侦听器: 我得到一个Exception@line: 通过堆栈溢出和网络上的其他

  • 问题内容: 尝试添加pdf文件生成时,我看到奇怪的行为。 在if语句上,以下代码将引发:both \ routes.js 错误:只能在方法调用中调用Meteor.userId。在发布函数中使用this.userId。在[对象Object] .Router处的Object.Meteor.user(packages / accounts-base / accounts_server.js:24:1)处

  • 当我使用poi JAR在excel工作簿中写入一些数据时,代码中出现了以下异常: 我添加了以下罐子: > xmlbeans-2.4.0 poi-ooxml-schemas-3.11 poi-3.11 commons-logging-1.1 dom4j-1.6.1 log4j-1.2.17

  • 问题内容: 我有在Android上运行良好的代码。当我将其移植到具有JRE 1.6的Windows 64位计算机上时,该代码不起作用。 当我运行以下代码行时: 我得到以下异常: java.security.NoSuchAlgorithmException:SHA256 MessageDigest在java.security.MessageDigest.getInstance(未知源)处的java.

  • 我是Spring的新手。我正在使用SpringWebMVC开发RESTAPI。对于错误处理,我得到了这个链接http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann rest spring mvc异常 我曾尝试在我的项目中使用ResponseEntityExceptionHand

  • 本文向大家介绍WMI入门教程之怎么使用WMI?,包括了WMI入门教程之怎么使用WMI?的使用技巧和注意事项,需要的朋友参考一下 知道了WMI是什么以后,肯定想要知道如何使用WMI干活。它能写“Hello World”吗?WMI没那么无聊,它一上来就会问你“你想要什么?”或者“你想要更改什么?”。。。 WMI工具   Windows本身提供了几个WMI工具供用户使用,包括WMIC.exe、WBEMT