Python psutil 在 Windows 上访问被拒绝

8 投票
2 回答
18857 浏览
提问于 2025-04-17 01:48

操作系统:Windows专业版

我正在尝试使用psutil这个库来获取进程列表和它们的CPU使用情况。我以管理员身份运行了脚本,但当遇到DymoPnpService.exe这个进程时就失败了,这可能是什么问题呢?

import psutil

def process():
    plist = psutil.get_process_list()
    plist = sorted(plist, key=lambda i: i.name)
    for i in plist:
        print i.name, i.get_cpu_percent()

def main():
    process()


main()

AcroRd32.exe 0.0 AcroRd32.exe 0.0 DymoPnpService.exe

Traceback (most recent call last):
  File "C:\Users\krisdigitx\Documents\windowsutil.py", line 13, in <module>
    main()
  File "C:\Users\krisdigitx\Documents\windowsutil.py", line 10, in main
    process()
  File "C:\Users\krisdigitx\Documents\windowsutil.py", line 7, in process
    print i.name, i.get_cpu_percent()
  File "C:\Python27\lib\site-packages\psutil\__init__.py", line 330, in get_cpu_percent
    pt1 = self._platform_impl.get_cpu_times()
  File "C:\Python27\lib\site-packages\psutil\_psmswindows.py", line 125, in wrapper
    raise AccessDenied(self.pid, self._process_name)
AccessDenied: (pid=1832, name='DymoPnpService.exe')

更多研究:

奇怪的是,我可以从Windows命令提示符运行这个程序……但在Python的开发环境中却失败了。

2 个回答

0

从版本0.6.0开始,psutil在Windows上将不再因为不同的进程方法(比如cpu_percent())而引发“访问被拒绝”的错误:

https://groups.google.com/forum/?fromgroups#!topic/psutil/oxAd0BuAzt0%5B1-25%5D

7

在命令提示符(cmd.exe)中运行这个命令:tasklist /FI "IMAGENAME eq DymoPnpService.exe" /V,然后查看“用户名”。如果显示的是“NT AUTHORITY\SYSTEM”,那么可能是这个程序故意不让即使是管理员账户也无法获取它的CPU使用时间、百分比等信息。

你可以下载一个叫做Process Explorer的工具,找到这个进程的路径,并在右键菜单中查看“安全”选项卡的设置。要解决这个问题,你可能需要编辑DymoPnpService.exe这个程序的所有者或权限,但这样做可能会在Windows中引发意想不到的问题。


如果这个进程不允许你获取它的详细信息,你也可以继续循环执行其他操作:

import psutil

def process():
    plist = psutil.get_process_list()
    plist = sorted(plist, key=lambda i: i.name)
    for i in plist:
        try:
            print i.name, i.get_cpu_percent()
        except AccessDenied:
            print "'%s' Process is not allowing us to view the CPU Usage!" % i.name

def main():
    process()

main()

撰写回答