Python psutil模块,为什么在if语句之前调用.exe()方法时会出现异常

2024-10-03 21:25:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理一个需要我使用psutil的项目,我试图将一些值与.txt文件的值进行比较,但出于某种原因,每当我在if语句外部调用psutil.Procces.exe()方法时,它最终会出现访问被拒绝的异常,让我告诉您我的意思:

import psutil
import time

ini = 'start'

def getTaskList():
    list_of_ran_proccesses = []
    for procs in psutil.process_iter():
        list_of_ran_proccesses.append(procs)
    return list_of_ran_proccesses

def CompareRunningFiles():
    if ini == "start":
        list_of_old_procs = getTaskList()
        while list_of_old_procs == getTaskList():
            time.sleep(0.01)
        for new_procs in psutil.process_iter():
            if not new_procs in list_of_old_procs:
                print(new_procs.exe())  

CompareRunningFiles()    

这个例子非常好,但是如果我这样做

import psutil
import time

ini = 'start'

def getTaskList():
    list_of_ran_proccesses = []
    for procs in psutil.process_iter():
        list_of_ran_proccesses.append(procs)
    return list_of_ran_proccesses

def CompareRunningFiles():
    if ini == "start":
        list_of_old_procs = getTaskList()
        while list_of_old_procs == getTaskList():
            time.sleep(0.01)
        for new_procs in psutil.process_iter():
            print(new_procs.exe())

CompareRunningFiles()

由于某种原因,这会导致访问被拒绝异常。 谢谢你的回答:)

编辑:我不确定,但这可能是因为模块试图访问一些受保护的目录吗

因为在if语句之后,它只会尝试获取启动的任何进程的目录,而在没有if语句的情况下,它会尝试访问所有正在运行的进程

因此,当它遇到一个系统进程时,它也会尝试获取它的目录,如果进程在一个受保护的目录中运行,它会引发一个拒绝访问的异常


Tags: ofinimportnewiftimestartini
1条回答
网友
1楼 · 发布于 2024-10-03 21:25:01

基本上,if语句阻止程序尝试获取某些系统进程的目录(它们始终处于打开状态),Windows中的某些目录受到保护,无法直接访问,如果没有if语句,模块将尝试获取所有正在运行的进程的目录,这将导致在尝试从受保护目录(例如:系统空闲进程)运行的进程获取目录时出现异常,使用(正如Omer所说的)“try:…psutil.AccessDenied:pass除外”将跳过这些过程并防止此问题。谢谢奥马尔的解释,谢谢你的三倍:D

相关问题 更多 >