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

时间:2014-04-13 02:08:03

标签: python windows process 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 个答案:

答案 0 :(得分:1)

除非您是root用户/管理员,否则并非您可以使用每个进程的所有信息。请参阅此问题:python psutil on windows gives access denied

最好通过以下方式更改您的第一个示例以专门捕获这些案例:

try:    
    if str(psutil.Process(pid).name()) == name:      
        return True    
except AccessDenied:    
    print "Unable to access PID:",pid