對於Windows 7 64位和psutil 5庫上的Python 3.5。Python 3 psutil,提取pid和名稱值?
我很困惑,如何正確地訪問名字和每個類的psutil.Process「由psutil.process_iter()返回項目內提供的PID信息。
以下代碼返回一個類的發電機'對象:
import psutil
curProcesses = psutil.process_iter()
一個簡單的循環輸出每個類'psutil.Process' 包含在該發電機內對象:
for eachProcess in curProcesses:
print(eachProcess)
OUTPUT:
psutil.Process(pid=0, name='System Idle Process')
psutil.Process(pid=4, name='System')
... and so on ...
現在,這裏是我變得困惑。
如果我改變了以前的循環如下的話,我會得到一個整數PID和一個字符串名。
for eachProcess in curProcesses:
# Observe the two different forms of access.
print(eachProcess.pid)
print(eachProcess.name())
OUTPUT:
0
System Idle Process
4
System
... and so on ...
所得整數,字符串是我想要的東西。然而,經過多次實驗,我只能讓他們IF:
eachProcess.pid後面沒有括號ALA eachProcess.pid。 (添加括號產生類型錯誤: 'INT' 對象不是可調用例外。)
eachProcess.name後跟括號的ala eachProcess.name()。 (刪除括號返回綁定的方法Process.name代替的字符串名字。)
爲什麼這兩個關鍵字尋找論據不同的pid和名的行爲? (我懷疑我將要了解的Python 3發電機對象是非常有用的東西......)
是否有一種直接的方式可以知道生成器對象中返回的not-really-keyword-argument是隻讀屬性還是方法?或者,你必須走到比喻的窗簾後面,閱讀圖書館的代碼嗎? (或者像我一樣試驗,直到發電機對象咳嗽出所需的信息。) – RBV
@RBV你最好的選擇總會是1)閱讀文檔,2)實驗。我通常會先與#2一起去,然後再去#1,如果我不能通過實驗來弄清楚它,那麼反過來也可能更安全。總是最好先閱讀文檔。如果文檔是好的,應該清楚某個方法或屬性是什麼,返回值是什麼,參數是什麼等等。上面爲'psutil'鏈接的文檔對您感興趣的屬性做了這些事情in。 – elethan
如果一個屬性寫成一個不帶參數的方法,而不是一個屬性,這可能意味着它可能會做很多工作。屬性的代碼應該相當輕 - 不過比常規實例屬性查找更多。例如,對於Windows上的'name',初始查找必須遍歷系統上所有正在運行的進程的信息快照,直到它找到當前進程,因此它被實現爲方法調用。 – eryksun