時發生Win32異常我想創建一個在python 3.4中創建一個函數來ping一個服務器。目前它只需要在Windows上工作(可能是XP及以上版本)。當使用pythoncom.CoUninitialize()和wmi
我發現我可以使用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")
這按預期工作,因爲它返回True時,您可以ping IP如果不能,則爲假。但是我每次運行它的時候我在最後得到了一系列的錯誤:
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()
,因爲我想描述here
我曾嘗試加入print(pythoncom._GetInterfaceCount())
,看看有多少接口都存在,並已注意到,每次運行該功能由6接口增加調用的函數在一個線程然後偶爾但不經常減少,但他們不會減少到10以下。
有誰知道爲什麼會發生這種異常,處理它的正確方法是什麼?
謝謝
請把它放在答案中,並標記爲已回答。回答你自己的問題完全可以接受:) – Steve 2014-10-27 21:42:34