【问题标题】:Python on Windows Server - Get user accessing shared fileWindows Server 上的 Python - 让用户访问共享文件
【发布时间】:2012-07-06 09:40:36
【问题描述】:

我需要找到打开某个文件的进程、用户或电脑。我可以通过 win 服务器附带的实用程序手动执行此操作,但我想编写脚本,因为我要处理数百个文件。

有什么想法、建议吗?

基本上是以下信息的列表:

【问题讨论】:

    标签: python file windows-server-2008 shared


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我正在使用 Python 2.6 并让 psutil 包正常工作,但在运行代码时出现此错误: 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>
    • 看起来您正在尝试询问您无权访问的进程。以管理员身份运行?
    • 你能举一个你提到的“handle.exe from sysinternals”方法的例子吗?
    • 无法避免某些进程的 AccessDenied,即使以管理员身份运行脚本也是如此。
    猜你喜欢
    • 1970-01-01
    • 2012-12-06
    • 2021-12-26
    • 1970-01-01
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    相关资源
    最近更新 更多