Für Python 3.5 unter Windows 7 64-Bit und die Psutil 5-Bibliothek.Python 3 psutil, pid und name Werte extrahieren?
Ich bin verwirrt, wie richtig den Namen und die pid Informationen zugreifen innerhalb jeder Klasse ‚psutil.Process‘ versehen Artikel von psutil.process_iter() zurück.
Der folgende Code gibt ein Klasse 'Generator' Objekt:
import psutil
curProcesses = psutil.process_iter()
eine einfache Schleife Ausgänge jede Klasse 'psutil.Process' Objekt innerhalb dieses Generators enthalten:
for eachProcess in curProcesses:
print(eachProcess)
AUSGABE:
psutil.Process(pid=0, name='System Idle Process')
psutil.Process(pid=4, name='System')
... and so on ...
Jetzt ist hier, wo ich verwirrt bin.
Wenn ich die vorherigen Schleife wie folgt ändern, dann werde ich eine ganze Zahl erhalten pid und einen String Namen.
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 ...
Die resultierende Integer und String sind genau das, was ich will. Doch nach einigen Versuchen kann ich sie nur, wenn:
eachProcess.pid NICHT durch Klammern ala eachProcess.pid folgt. (Die in Klammern Hinzufügen erzeugt ein Typeerror: 'int' Objekt nicht aufrufbaren Ausnahme.)
eachProcess.name wird gefolgt von Klammern ala eachProcess.name(). (Die Klammern Entfernen gibt eine gebunden Methode Process.name anstelle der Namen als String.)
Warum die beide Keyword-Suche Argumente und Namen anders verhalten pid? (Ich bin ich zu vermuten, dass etwas sehr nützlich, um Python zu lernen 3 Generator-Objekte ...)
Gibt es eine einfache Möglichkeit zu wissen, dass ein nicht-wirklich-Schlüsselwort-Argument zurückgegeben in einem Generator-Objekt ein schreibgeschütztes Attribut gegenüber einer Methode ist? Oder muss man hinter den figurativen Vorhang gehen und den Code der Bibliothek lesen? (Oder experimentieren Sie wie ich, bis das Generator-Objekt die gewünschten Informationen ausgibt.) – RBV
@RBV Ihre beste Wette ist immer 1) Lesen Sie die Dokumentation und 2) experimentieren Sie. Ich gehe normalerweise zuerst mit # 2 und dann mit # 1, wenn ich es durch Experimente nicht herausfinden kann - es ist wahrscheinlich sicherer, es andersherum zu machen. Lesen Sie immer zuerst die Dokumentation. Wenn die Dokumente gut sind, sollte klar sein, ob etwas eine Methode oder ein Attribut ist, was der Rückgabewert ist, was die Argumente sind usw. Die oben verlinkten Dokumente für 'psutil' machen diese Dinge in Bezug auf die Eigenschaften, die Sie interessieren in. – elethan
Wenn ein Attribut als eine Methode geschrieben wird, die keine Argumente entgegennimmt, im Gegensatz zu einer Eigenschaft, bedeutet dies wahrscheinlich, dass es möglicherweise viel Arbeit verrichtet. Der Code für Eigenschaften sollte ziemlich hell sein - nicht viel mehr als eine normale Suche nach Instanzattributen. Zum Beispiel muss für "Name" unter Windows die anfängliche Suche eine Momentaufnahme von Informationen über alle laufenden Prozesse auf dem System durchlaufen, bis sie den aktuellen Prozess findet, so dass sie als Methodenaufruf implementiert wird. – eryksun