You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python监控共享文件夹报PermissionError: [WinError 31]求助

问题:监控文件服务器共享路径时触发WinError 31错误

用户实现了一个基于Watchdog的程序,用于监控文件服务器共享路径并处理文件数据插入数据库,代码如下:

class MetrologyObserver(object):
    def __init__(self, root_path):
        self.root_path = root_path
        self.event_handler = MetrologyEventHandler()
        self.event_observer = Observer()

    def run(self):
        self.schedule()
        self.start()
        try:
            while True:
                time.sleep(1)
        except KeyboardInterrupt:
            self.stop()
        self.event_observer.join()

    def start(self):
        self.event_observer.start()

    def stop(self):
        self.event_observer.stop()

    def schedule(self):
        self.event_observer.schedule(self.event_handler,
                                     self.root_path,
                                     recursive=True)
if __name__ == "__main__":
   src_path = r'\\shared folder path'
   MetrologyObserver(src_path).run()

执行程序时出现以下错误:

File "C:\Users\xxxxx\Anaconda3\lib\site-packages\watchdog\observers\winapi.py", line 112, in _errcheck_handle
raise ctypes.WinError()
PermissionError: [WinError 31] A device attached to the system is not functioning.


排查与解决办法

  • 验证共享路径权限
    确保运行程序的Windows账户对目标共享路径拥有读取、列出目录的权限,必要时添加修改权限。先手动访问共享路径确认权限正常,若手动访问失败,优先调整系统共享权限配置。

  • 规避Watchdog的SMB兼容性问题
    Watchdog的Windows后端依赖WinAPI,对SMB网络共享的监控支持存在局限性,WinError 31多由此引发,可通过两种方式解决:

    1. 映射网络驱动器:将共享路径映射为本地驱动器(如Z:\),修改代码中src_path为映射后的路径(r'Z:\')。映射时勾选“登录时重新连接”,保证权限持久有效。
    2. 改用定时轮询方案:放弃实时事件监听,用定时扫描替代。示例代码如下:
      import os
      import time
      
      def process_files_in_shared(path):
          for root, _, files in os.walk(path):
              for file_name in files:
                  full_path = os.path.join(root, file_name)
                  # 此处添加读取文件、插入数据库的逻辑
                  print(f"处理文件:{full_path}")
      
      if __name__ == "__main__":
          src_path = r'\\shared folder path'
          scan_interval = 300  # 每5分钟扫描一次
          while True:
              process_files_in_shared(src_path)
              time.sleep(scan_interval)
      
  • 检查运行账户权限(服务场景)
    若程序以Windows服务形式运行,默认服务账户权限受限,需为服务账户配置共享路径访问权限,或切换为具备管理员权限的账户运行服务。

  • 排查网络稳定性
    WinError 31也可能因共享连接不稳定导致,检查本地与文件服务器的网络连接,重启相关网络设备或服务器,确保共享路径可稳定访问。


内容的提问来源于stack exchange,提问作者user2207791

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:43:20