Python的psutil模块和一个奇怪的问题

1 投票
1 回答
1312 浏览
提问于 2025-04-18 02:32

这个代码运行得很好:

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

撰写回答