1

这完美地工作:

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,如果我在第二个示例中删除它们,为什么它不起作用?

4

1 回答 1

1

除非您是 root 用户/管理员,否则并非每个进程的所有信息都可供您使用。看到这个问题:python psutil on windows give access denied

你最好改变你的第一个例子来专门捕捉这些情况,用:

try:    
    if str(psutil.Process(pid).name()) == name:      
        return True    
except AccessDenied:    
    print "Unable to access PID:",pid
于 2014-04-13T02:57:36.493 回答