我正在寻找一种方法来确定哪些文件在我的整个系统(Linux)中打开使用Python.我找不到任何模块做这件事.或者也许唯一的方法是使用命令lsof?
zynd9foi1#
截至2018年4月更新以获取psutil的最新版本:
psutil
较新版本的psutil现在对此函数使用稍微不同的函数名open_files,如其文档中的以下示例所示:
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示例只创建一次,然后缓存到一个内部表中,该表在每次使用时都会更新。
a11xaf1n2#
在p.get_open_files()的替换中,我已经在Python 3.7和Windows10下成功地进行了测试。
fileList = p.as_dict(attrs=['open_files'])
2条答案
按热度按时间zynd9foi1#
截至2018年4月更新以获取
psutil
的最新版本:较新版本的
psutil
现在对此函数使用稍微不同的函数名open_files
,如其文档中的以下示例所示:原始答案/
psutil
的旧版本:如果你在documentation中查找psutil python模块(在PyPI上可用),你会发现一个方法,它检查给定进程上打开的文件。你可能想得到一个所有活动PID的列表,如related stack overflow response中所述。然后使用下面的方法:
get_open_files()返回进程打开的常规文件,作为命名元组列表,包括文件绝对路径名和文件描述符。
0.2.1中的变更:用C语言重写OSX实现不再需要lsof。0.4.1中的更改:用C语言重写的FreeBSD实现;不再需要LSOF。
Edit:用于迭代活动PID psutil有另一个方法(在上面的堆栈溢出响应中也引用了该方法):
伪进程_iter()
返回一个迭代器,该迭代器为本地计算机上所有正在运行的进程生成Process类示例。每个新的Process示例只创建一次,然后缓存到一个内部表中,该表在每次使用时都会更新。
a11xaf1n2#
在p.get_open_files()的替换中,我已经在Python 3.7和Windows10下成功地进行了测试。