2013-11-01 2 views
0

psutil을 사용하여 Windows 7에서 프로세스의 PID를 얻으려고 시도했지만 권한 오류가 발생했습니다. 관리자로 스크립트를 실행하는 명령 프롬프트를 실행 해 보았지만 아무런 효과가없는 것으로 보입니다. 오류 및 관련 코드는 모두 아래에 있습니다. 오류가 발생한 행은 proc.name을 사용하여 프로세스 이름에 액세스하려고 시도하는 경우입니다. 이 문제를 어떻게 해결할 수 있을지에 대한 제안이 있으십니까? 많이 고마워!Python - psutil Windows 권한 오류?

오류 :

Traceback (most recent call last): 
    File "C:\Python33\lib\site-packages\psutil\_psmswindows.py", line 190, in wrapper 
    return fun(self, *args, **kwargs) 
    File "C:\Python33\lib\site-packages\psutil\_psmswindows.py", line 229, in get_process_exe 
    return _convert_raw_path(_psutil_mswindows.get_process_exe(self.pid)) 
PermissionError: [WinError 5] Access is denied 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "simple_address_retrieve.py", line 14, in <module> 
    if proc.name == PROCNAME: 
    File "C:\Python33\lib\site-packages\psutil\_common.py", line 48, in __get__ 
    ret = self.func(instance) 
    File "C:\Python33\lib\site-packages\psutil\__init__.py", line 341, in name 
    name = self._platform_impl.get_process_name() 
    File "C:\Python33\lib\site-packages\psutil\_psmswindows.py", line 190, in wrapper 
    return fun(self, *args, **kwargs) 
    File "C:\Python33\lib\site-packages\psutil\_psmswindows.py", line 222, in get_process_name 
    return os.path.basename(self.get_process_exe()) 
    File "C:\Python33\lib\site-packages\psutil\_psmswindows.py", line 194, in wrapper 
    raise AccessDenied(self.pid, self._process_name) 
psutil._error.AccessDenied: (pid=128) 

코드 :

PROCNAME = "MyProcessName.exe" 

for proc in psutil.process_iter(): 
    if proc.name == PROCNAME: 
     print(proc) 

답변

1

get_process_list는()() 0.6.0 사용 psutil.process_iter을 사용되지 않습니다. 또한 최신 psutil에서이 문제가 해결 된 것 같습니다. 또한 프로세스의 반복을 계속 할 수 있습니다 의견에서

for proc in psutil.process_iter(): 
    try: 
     if proc.name == PROCNAME: 
      print(proc) 
    except (PermissionError, AccessDenied): 
     print "Permission error or access denied on process" # can't display name or id here 

:

... 등을 검색, 저자가 고정 (너무 복잡)하지 않을 것이라는 문제가 나타납니다 : http://groups.google.com/forum/#!topic/psutil/EbdkIGlb4ls. 이 대답은이를 수행하는 가장 좋은 방법 인 것처럼 보입니다. PermissionError가 없으므로 그냥 AccessDenied를 잡으십시오.

+0

자세한 정보 (액세스가 거부 된 경우) : https://groups.google.com/forum/?fromgroups=#!topic/psutil/oxAd0BuAzt0[1-25-false ] – Gerrat

+2

proc.name에 액세스 할 때 AccessDenied를 얻는 경우 예외가 발생하면 proc.name에 액세스 할 수 없습니다. – Gerrat

+0

맞아요, 감사합니다! – nickzam