Python psutil 模块,为什么当我在 if 语句之前调用 .exe() 方法时它以异常结束
Python psutil module, why does it end up with an exception when i call .exe() method before an if statement
我正在做一个需要我使用 psutil
的项目,我试图将一些值与 .txt
文件的值进行比较,但出于某种原因,每当我调用 psutil.Procces.exe()
方法在 if 语句之外它会以拒绝访问异常结束,让我告诉你我的意思:
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 所说)“try:... except psutil.AccessDenied: pass”将跳过这些进程并防止出现此问题。感谢 Omer 的解释和 tripleee 的解释:D
我正在做一个需要我使用 psutil
的项目,我试图将一些值与 .txt
文件的值进行比较,但出于某种原因,每当我调用 psutil.Procces.exe()
方法在 if 语句之外它会以拒绝访问异常结束,让我告诉你我的意思:
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 所说)“try:... except psutil.AccessDenied: pass”将跳过这些进程并防止出现此问题。感谢 Omer 的解释和 tripleee 的解释:D