这很完美:

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

它会引发一个错误:拒绝访问:(PID = 560)我在Windows环境上,需要访问所有过程的名称。我已经有一个工作代码(前者),所以我的问题更多是出于好奇。

做什么的 try/except 语句在第一个示例中起作用,为什么如果我在第二个示例中删除它们则不起作用?

有帮助吗?

解决方案

除非您是根用户/管理员,否则并非每个进程的所有信息都可供您使用。看这个问题: Windows 上的 python psutil 拒绝访问.

您最好更改第一个示例以专门捕获这些情况,方法是:

try:    
    if str(psutil.Process(pid).name()) == name:      
        return True    
except AccessDenied:    
    print "Unable to access PID:",pid
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top