2014-02-14 35 views
4

我遇到了一個主要問題:我無法訪問用戶不擁有的(大多數)進程的信息。 例如,以下內容:Psutil在獲取進程屬性時爲所有非用戶擁有的進程提高AccessDenied

for proc in psutil.process_iter(): 
    try: 
     print proc.pid, proc.username 

    except psutil.AccessDenied: 
     print "denied" 

打印:

0 NT AUTHORITY\SYSTEM 
4 NT AUTHORITY\SYSTEM 
428 denied 
444 denied 
632 my_user 
648 denied 
676 my_user 
704 denied 
748 denied 
772 denied 
804 denied 
824 denied 
832 denied 
880 my_user 
920 denied 
988 denied 
1052 denied 
... 

對於這些相同的 「被拒絕」 過程的方法等get_cpu_times()很好地工作。

UPD:對不起,我跑這個東西具有不同屬性和不同的打印這麼多次,我粘貼的輸出是從一個不同的代碼段(印製username,不name)。但是,我希望,這一點仍然很清楚......

回答

2

看來,錯誤是在底層C代碼中生成的。 我不知道whay GetProcessImageFileName()優先於QueryFullProcessImageName()(因爲後者像我們預期的那樣使用驅動器號/ UNC路徑返回路徑),但可能是因爲任何一個調用都會失敗。

你可能不得不採取這個the developers

_psutil_mswindows.c(線502):

if (GetProcessImageFileName(hProcess, &exe, nSize) == 0) { 
    CloseHandle(hProcess); 
    if (GetLastError() == ERROR_INVALID_PARAMETER) { 
     // see https://code.google.com/p/psutil/issues/detail?id=414 
     AccessDenied(); 
    } 
    else { 
     PyErr_SetFromWindowsErr(0); 
    } 
    return NULL; 
} 

編輯:
我試圖做的症狀,多一點調查,我有更多一點的報告。上的更多或更少,完全打補丁的Win7 SP1的x64機器具有相對最近的Python 2(2.7.6),I不能訪問psutil.Process類的這些成員:exeget_ionice()get_memory_maps()get_nice()get_cwd()/getcwd()get_open_files()name,niceusername

此信息當然可用於Windows機器的任何管理員用戶,因此我不知道爲什麼psutil無法獲取它,除非它是在The Wrong Way™(由Microsoft定義的永久移動目標)中執行它。

+0

Python是否在提升的環境中運行? –

+0

在我的跑步中,是的。 – mojo

+0

在我的情況也 –

相關問題