繁体   English   中英

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

[英]Check for open files with Python in Linux

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

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

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

较新版本的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)]

原始答案/旧版本的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 实例只创建一次,然后缓存到一个内部表中,每次使用时都会更新该表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM