5

我在 Windows 8.1 上的 python 64 位上使用 psutil 2.1.2。我正在使用 psutil.process_iter() 来迭代正在运行的进程以获取有关特定进程的详细信息。出于某种原因,即使它显示在任务管理器和进程资源管理器中,我也没有得到该进程

for proc in psutil.process_iter():
    try:
        if proc.name() == 'svchost.exe':  # patch for debugging 
            pass  #script never gets here
        opened_files = proc.open_files()
        opened_files = [opened_file[0] for opened_file in opened_files]
        if file_path in opened_files:
            processes.append(proc)
    except (psutil.AccessDenied, psutil.NoSuchProcess):
        pass

我检查了过程名称,它从来不是我正在寻找的过程。我看不到的进程示例是 svchost.exe

谢谢您的帮助!

4

2 回答 2

4

对于某些(实际上是很多)进程 proc.open_files() 将导致 AccessDenied 异常,因此可能这就是您没有“看到”所有进程的原因。任务管理器和进程资源管理器比 psutil 显示更多信息,因为它们具有较少的权限限制(请参阅:它们可以从进程中“提取”更多信息而不会遇到“拒绝访问”错误)。通过使用 psutil,您可以查看所有进程 (PID),但只有您无法“查询”所有进程。

于 2014-10-29T10:19:39.603 回答
1

可能这个错误https://github.com/giampaolo/psutil/issues/599是导致问题的原因。现在修好了。

于 2016-04-15T15:59:39.333 回答