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

xlpyo6sf  于 2023-02-15  发布在  Python
关注(0)|答案(2)|浏览(159)

我正在寻找一种方法来确定哪些文件在我的整个系统(Linux)中打开使用Python.我找不到任何模块做这件事.
或者也许唯一的方法是使用命令lsof?

zynd9foi

zynd9foi1#

截至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)]

原始答案/psutil的旧版本:
如果你在documentation中查找psutil python模块(在PyPI上可用),你会发现一个方法,它检查给定进程上打开的文件。你可能想得到一个所有活动PID的列表,如related stack overflow response中所述。然后使用下面的方法:
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。
Edit:用于迭代活动PID psutil有另一个方法(在上面的堆栈溢出响应中也引用了该方法):
伪进程_iter()
返回一个迭代器,该迭代器为本地计算机上所有正在运行的进程生成Process类示例。每个新的Process示例只创建一次,然后缓存到一个内部表中,该表在每次使用时都会更新。

a11xaf1n

a11xaf1n2#

在p.get_open_files()的替换中,我已经在Python 3.7和Windows10下成功地进行了测试。

fileList = p.as_dict(attrs=['open_files'])

相关问题