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

Joh*_*now 9 python linux lsof

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

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

谢谢!

tre*_*ddy 15

截至2018年4月更新的更新版本psutil:

的新版本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)]
Run Code Online (Sandbox Code Playgroud)

原始答案/旧版本psutil:

如果您查看psutil python模块的文档(可在PyPI上找到),您将找到一个方法来检查给定进程上的打开文件.您可能希望获得所有活动PID的列表,如相关堆栈溢出响应中所述.然后使用以下方法:

get_open_files()将process打开的常规文件作为包含文件绝对路径名和文件描述符的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)]
Run Code Online (Sandbox Code Playgroud)

在0.2.1中更改:在C中重写OSX实现; 不再需要lsof.在0.4.1中更改:在C中重写FreeBSD实现; 不再需要lsof.

编辑:为了迭代活动PID,psutil有另一个方法(在上面的堆栈溢出响应中也引用了它):

psutil.process_iter()

返回一个迭代器,为本地计算机上的所有正在运行的进程生成一个Process类实例.每个新的Process实例仅创建一次,然后缓存到内部表中,每次使用时都会更新.