Windows Server上的Python - 让用户访问共享文件

时间:2012-07-06 09:40:36

标签: python file windows-server-2008 shared

我需要找到哪个进程,用户或PC有某个文件打开。我可以通过win服务器附带的实用程序手动完成,但我想编写脚本,因为我正在处理数百个文件。

有任何想法,建议吗?

基本上是以下信息列表: enter image description here

1 个答案:

答案 0 :(得分:2)

要获取此信息,需要一些未记录的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转换实用程序修复了这些问题。