对于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