我需要找到哪个进程、用户或电脑打开了某个文件。我可以通过 win 服务器附带的实用程序手动执行此操作,但我想编写脚本,因为我正在处理数百个文件。
有什么想法,建议吗?
基本上是以下信息的列表:
我需要找到哪个进程、用户或电脑打开了某个文件。我可以通过 win 服务器附带的实用程序手动执行此操作,但我想编写脚本,因为我正在处理数百个文件。
有什么想法,建议吗?
基本上是以下信息的列表:
要获取此信息,需要一些未记录的 Win32 API。你可以handle.exe
从使用它们的 sysinternals 中调用类似的东西,但我建议你使用psutil
PyPi 提供的模块。这是我碰巧拥有的一些示例代码(Py3),其中列出了所有正在使用的文件,您应该可以对其进行修改:
import psutil
for proc in psutil.process_iter():
try:
flist = proc.get_open_files()
if flist:
print(proc.pid,proc.name)
for nt in flist:
print("\t",nt.path)
except psutil.NoSuchProcess as err:
print("****",err)
请注意,这类查询总是有可能出现竞争条件——您不知道进程在什么时候打开或关闭文件,甚至不知道开始和结束。
PS:如果您使用的是 Python 3,我在安装 psutil 时遇到了一些问题,但使用 setup.py 上的 2to3 转换实用程序解决了这些问题。