您好我正在寻找一种方法来确定使用Python在我的整个系统(Linux)中打开哪些文件。我找不到任何这样做的模块。
或许唯一的方法是使用命令lsof?
谢谢!
答案 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实例仅创建一次,然后缓存到内部表中,每次使用时都会更新。