13

我正在寻找一种方法来确定使用 Python 在我的整个系统(Linux)中打开了哪些文件。我找不到任何这样做的模块。

或者也许唯一的方法是使用命令 lsof?

4

1 回答 1

20

自 2018 年 4 月起更新以下版本psutil

now 的较新版本psutil为此使用了稍微不同的函数名称open_files,如下面的示例所示

>>> import psutil
>>> f = open('file.ext', 'w')
>>> p = psutil.Process()
>>> p.open_files()
[popenfile(path='/home/giampaolo/svn/psutil/file.ext', fd=3)]

原始答案/旧版本psutil

如果您查看 psutil python 模块(可在 PyPI 上获得)的文档,您会发现一种检查给定进程上打开文件的方法。您可能希望获得所有活动 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 实例只创建一次,然后缓存到一个内部表中,每次使用时都会更新该表。

于 2013-11-20T23:03:40.397 回答