2016-05-16 1 views
0

で動作しないのですか?私はタスクマネージャにアクセスする方法をifndしようとしています。私は、wmiモジュールとWindowsタスクリストを含むいくつかの方法を試しましたが、私の必要性はありません。 wmiは遅すぎて、マルチプロセッシングを使って複数回同時にアクセスすると、タスクリストが遅すぎるようになります。だから私は非常にうまく動作するが、私はそれをスレッドで動作するように取得することはできませんこのスクリプトを発見した。なぜこのスクリプトはスレッドのpython

import win32com.client 
strComputer = "." 
objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator") 
objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2") 
colItems = objSWbemServices.ExecQuery("Select * from Win32_Process") 
for objItem in colItems: 
    print "Name: ", objItem.Name 
    print "File location: ", objItem.ExecutablePath 

これはエラーです:

Exception in thread Thread-1: 
Traceback (most recent call last): 
    File "C:\Python27\lib\threading.py", line 810, in __bootstrap_inner 
    self.run() 
    File "C:\Python27\lib\threading.py", line 763, in run 
    self.__target(*self.__args, **self.__kwargs) 
    File "C:\python practice\stuff.py", line 5, in idk 
    objWMIService = win32com.client.Dispatch("WbemScripting.SWbemLocator") 
    File "C:\Python27\lib\site-packages\pypiwin32-219-py2.7-win32.egg\win32com\cli 
ent\__init__.py", line 95, in Dispatch 
    dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,c 
lsctx) 
    File "C:\Python27\lib\site-packages\pypiwin32-219-py2.7-win32.egg\win32com\cli 
ent\dynamic.py", line 114, in _GetGoodDispatchAndUserName 
    return (_GetGoodDispatch(IDispatch, clsctx), userName) 
    File "C:\Python27\lib\site-packages\pypiwin32-219-py2.7-win32.egg\win32com\cli 
ent\dynamic.py", line 91, in _GetGoodDispatch 
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.II 
D_IDispatch) 
com_error: (-2147221008, 'CoInitialize has not been called.', None, None) 
+0

が重複する可能性を参照してください[マルチスレッドでwin32comを使用する](http://stackoverflow.com/questi) ons/26764978/using-win32com-multithreading) –

答えて

3

あなたはwin32com.clientを使用するためにCoInitialize()を呼び出す必要があります:

import pythoncom 
import win32com.client as client 

pythoncom.CoInitialize() 

strComputer = "." 
objWMIService = client.Dispatch("WbemScripting.SWbemLocator") 
objSWbemServices = objWMIService.ConnectServer(strComputer,"root\cimv2") 
colItems = objSWbemServices.ExecQuery("Select * from Win32_Process") 

for objItem in colItems: 
    print "Name: ", objItem.Name 
    print "File location: ", objItem.ExecutablePath 

より多くの背景情報についてのusing win32com with multithreading

関連する問題