【发布时间】:2021-06-13 06:17:57
【问题描述】:
我有一段简单的代码主要来自answer,并做了一些调整:
import psutil
try:
if "firefox.exe" in (p.name() for p in psutil.process_iter()):
print('Firefox is running')
else:
print('Firefox is not running')
except Exception as e:
print(e)
如果在我运行此代码时 Firefox 正在运行,它会打印预期的 Firefox is running。但如果 Firefox 没有运行,我会得到 psutil.AccessDenied (pid=9092) 而不是预期的 Firefox is not running。
我还注意到,如果firefox.exe 拼写错误,我会再次收到AccessDenied 错误。我可以只在except 块内使用print('Firefox is not running'),但这似乎不太聪明。
有人知道为什么会这样吗?
【问题讨论】:
-
因为你没有权限获取PID 9092的名字。
-
我该如何解决这个问题?以管理员身份运行?
-
既然您已经测试过firefox运行时它可以正常工作,只需处理权限错误异常并打印不运行即可。
-
对。你不关心特权进程是什么。你只关心你没有看到 Firefox。
-
一个问题,
PermissionError没有捕捉到psutil.AccessDenied (pid=9092)错误