【发布时间】:2012-07-06 09:40:36
【问题描述】:
我需要找到打开某个文件的进程、用户或电脑。我可以通过 win 服务器附带的实用程序手动执行此操作,但我想编写脚本,因为我要处理数百个文件。
有什么想法、建议吗?
基本上是以下信息的列表:
【问题讨论】:
标签: python file windows-server-2008 shared
我需要找到打开某个文件的进程、用户或电脑。我可以通过 win 服务器附带的实用程序手动执行此操作,但我想编写脚本,因为我要处理数百个文件。
有什么想法、建议吗?
基本上是以下信息的列表:
【问题讨论】:
标签: python file windows-server-2008 shared
要获取此信息,需要一些未记录的 Win32 API。你可以打电话给handle.exe
来自使用它们的 sysinternals,但我建议您使用 PyPi 提供的 psutil 模块。这是我碰巧有的一些示例代码(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 转换实用程序解决了这些问题。
【讨论】:
File "C:\Users\administrator\Desktop\test_deleteme.py", line 5, in <module> flist = proc.get_open_files() 文件“C:\Python26\lib\site-packages\psutil_<i>init_</i>.py”,第 41 行,get_open_files 返回 self._platform_impl.get_open_files() 文件“C:\Python26 \lib\site-packages\psutil_psmswindows.py",第 145 行,在 wrapper raise AccessDenied(self.pid, self._process_name) psutil.error.AccessDenied: (pid=1280) </module>