在Linux中使用Python检查打开的文件

时间:2013-11-20 20:23:35

标签: python linux lsof

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

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

谢谢!

1 个答案:

答案 0 :(得分:12)

更新截至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() 将进程打开的常规文件作为namedtuples列表返回,包括文件绝对路径名和文件描述符。例如:

>>> 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实例仅创建一次,然后缓存到内部表中,每次使用时都会更新。