You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用psutil遍历进程时 全程运行的notepad.exe多数提示未找到

问题根因

你的代码输出逻辑和预期不匹配:当前写法是每遍历到系统里的一个进程,就立刻打印一次匹配结果,不是扫完所有进程之后再判断目标进程是否存在。
系统后台同时运行着几十上百个非记事本进程(系统服务、驱动相关进程、其他前台软件、Python解释器本身等等),遍历到这些进程时必然输出not found,只有刚好遍历到唯一的notepad.exe进程实例时才会输出一次found。你现在拿到的输出结果恰恰说明psutil正常识别到了运行中的记事本,根本不存在识别不稳定的问题,只是你给每个非目标进程都打印了“未找到”的日志,才造成了“大部分时候识别不到”的错觉。

正确写法

如果你的需求是检测系统中是否存在运行中的目标进程,不要在单进程判断分支里直接输出最终结果,先做存在标记,遍历完成后再统一输出结论。另外遍历进程时建议提前指定需要拉取的进程属性,同时做好异常捕获,避免碰到权限不足、进程遍历中途退出的情况抛错:

import psutil

target_proc = "notepad.exe"
proc_exist = False

# 传入属性列表可以减少跨进程调用开销,遍历性能更好
for proc in psutil.process_iter(["name"]):
    try:
        if proc.info["name"].lower() == target_proc.lower():
            proc_exist = True
            # 找到目标后直接跳出循环即可,不需要继续遍历
            break
    except (psutil.NoSuchProcess, psutil.AccessDenied):
        # 遍历瞬间进程退出、或者当前用户无权访问该进程信息时直接跳过
        continue

print("found" if proc_exist else "not found")
补充说明

如果你本来的需求就是逐个校验每个运行中的进程是不是记事本,那现有输出是完全符合逻辑的——系统里本来就只有一个记事本进程在运行,剩下所有进程都不是目标,自然只会出现一条found记录。

注意:psutil.process_iter()返回的是调用时刻的全量进程列表快照,不是对同一个目标进程的多次重复检测,不要把列表里的每个遍历项当成对记事本的多次识别结果。

内容的提问来源于stack exchange,提问作者whytfnotworking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 10:39:27