Python的psutil模块和一个奇怪的问题
这个代码运行得很好:
def find_processes():
name = "ProcessName.exe"
pid_list = psutil.get_pid_list()
for pid in pid_list:
try:
if str(psutil.Process(pid).name()) == name:
return True
except:
pass
return False
这个代码就不行:
def find_processes():
name = "ProcessName.exe"
pid_list = psutil.get_pid_list()
for pid in pid_list:
if str(psutil.Process(pid).name()) == name:
return True
return False
它报了一个错误:AccessDenied: (pid=560) 我在Windows环境下,需要访问所有进程的名称。我已经有了一个能正常工作的代码(就是前面的那个),所以我这个问题更多是出于好奇。
在第一个例子中,try
/except
语句是干什么的?如果我在第二个例子中去掉它们,为什么就不行了呢?
1 个回答
1
并不是每个进程的信息都能被你看到,除非你是系统的管理员或者超级用户。你可以看看这个问题:在Windows上使用python psutil时会出现访问被拒绝的情况。
你可以考虑修改你的第一个例子,专门处理这些情况,使用:
try:
if str(psutil.Process(pid).name()) == name:
return True
except AccessDenied:
print "Unable to access PID:",pid