自 2018 年 4 月起更新以获取最新版本的 psutil:
psutil 的较新版本现在为此使用稍微不同的函数名称,open_files,如以下来自 their docs 的示例所示:
>>> import psutil
>>> f = open('file.ext', 'w')
>>> p = psutil.Process()
>>> p.open_files()
[popenfile(path='/home/giampaolo/svn/psutil/file.ext', fd=3)]
原始答案/psutil 的旧版本:
如果您在documentation 中查找 psutil python 模块(可在 PyPI 上使用),您会发现一种方法可以检查给定进程上的打开文件。您可能希望获得related stack overflow response 中描述的所有活动 PID 的列表。然后使用下面的方法:
get_open_files()
将进程打开的常规文件作为命名元组列表返回,包括文件绝对路径名和文件描述符。示例:
>>> f = open('file.ext', 'w')
>>> p = psutil.Process(os.getpid())
>>> p.get_open_files()
[openfile(path='/home/giampaolo/svn/psutil/file.ext', fd=3)]
在 0.2.1 中更改:用 C 重写了 OSX 实现;不再需要lsof。
在 0.4.1 中更改:用 C 重写的 FreeBSD 实现;不再需要 lsof。
编辑:对于活动 PID 的迭代,psutil 有另一种方法(在上述先前的堆栈溢出响应中也引用了该方法):
psutil.process_iter()
返回一个迭代器,为本地机器上所有正在运行的进程生成一个 Process 类实例。每个新的 Process 实例只创建一次,然后缓存到一个内部表中,每次使用时都会更新该表。