繁体   English   中英

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文件的值进行比较,但由于某种原因,每当我在 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 所说)“try:... except psutil.AccessDenied :pass" 将跳过这些过程并防止此问题。 谢谢 Omer 的解释和三人组的解释:D

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM