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



我正在处理一个需要使用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语句,它会尝试访问各种正在运行的进程。

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

基本上,那里的if语句阻止程序尝试获取一些系统进程的目录(它们总是打开的(,Windows中的一些目录受到保护,不能直接访问,在没有if语句的情况下,模块试图获取所有正在运行的进程的目录,并且当它试图为从受保护目录运行的进程(例如:系统空闲进程(这样做时,使用(如Omer所说(";尝试:。。。除了psutil。AccessDenied:pass"将跳过这些过程并防止出现此问题。感谢Omer的解释和三元组的相同:D

相关内容

  • 没有找到相关文章

最新更新