Python psutil检测notepad.exe时未触发预期输出与异常问题
问题根因
你的代码逻辑存在两处核心偏差,直接导致未启动记事本时无输出:
print("n")被错误放在进程遍历的except异常分支下,只有遍历某一个进程时触发访问错误(如权限不足、进程遍历中途退出)才会执行,和「未检测到notepad.exe」的判定条件完全无关- 缺失「遍历完所有进程仍未匹配到目标进程」的判定分支:如果遍历全程既没碰到notepad.exe,也没触发任何进程访问异常,代码不会执行任何打印操作
- 附带逻辑漏洞:匹配到notepad.exe后没有终止遍历,若系统存在多个同名进程会重复打印"y",且遍历过程中插入的
sleep(1)会拖慢检测效率
修正后代码
import psutil from time import sleep target_process = "notepad.exe" is_running = False for proc in psutil.process_iter(): try: if proc.name().lower() == target_process.lower(): is_running = True break except (psutil.NoSuchProcess, psutil.AccessDenied): # 跳过访问失败、遍历过程中已退出的进程 continue print("y" if is_running else "n") sleep(1)
逻辑说明
- 提前初始化布尔标记位
is_running,默认值为False,代表初始状态下未检测到目标进程 - 遍历进程时仅做名称匹配,一旦匹配到目标进程立刻将标记位置为
True并跳出循环,避免无效遍历 - 异常捕获仅针对进程访问的两类常见错误,捕获后直接跳过当前异常进程,不参与最终结果判定
- 所有进程遍历完成后,再根据标记位的状态统一输出结果,保证找到/未找到目标进程两种场景下都有对应输出
内容的提问来源于stack exchange,提问作者whytfnotworking
相关产品推荐
相关产品推荐

