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

Python脚本批量修改Desktop文件夹文件运行无响应冻结问题咨询

问题描述

使用Python脚本批量写入修改位于「Desktop」文件夹内的文件时,脚本会在处理约10-15个文件后无响应冻结,该现象与文件类型无关,仅和脚本修改的文件数量相关。
若将待修改文件移出Desktop文件夹(路径C:\Users\User\Desktop),或者通过CMD以管理员权限运行Python脚本,则不会出现冻结问题。

补充测试说明

该行为与特定文件无关,测试了随机选取的各类文件,删除此前导致冻结的文件后,脚本依然会在处理相同数量的文件后冻结;删除前9个已成功处理的文件后,脚本可以正常修改此前导致冻结的文件,但依然会在处理约10-15个文件后再次冻结。

触发冻结的示例代码如下:

root = ...
for path, subdirs, files in os.walk(root):
    for name in files:
        file = (os.path.join(path, name))
        print("1")
        with open(file, 'r+b') as f: #脚本在此处冻结
            print("2") #与文件类型无关
            f.seek(1)  #但循环迭代到10-15次左右就会停止
            f.write(b'\x0a')

运行环境

Python 3.10,近期更新的Windows 10系统,已关闭Windows Defender。

其他测试结果

  • 将with上下文管理替换为手动open()+close()写法,无法解决问题。
  • 测试过.txt、.css、.bin等不同格式的文件,均会出现该冻结问题,触发冻结时处理的文件数量在10-20区间波动。

咨询问题

为什么该现象发生时没有任何异常、错误抛出,也没有系统通知?是什么原因导致脚本冻结?为什么冻结会在成功修改10-20个文件后才出现?


解答

根因分析

  • 无报错的原因:该问题属于Windows内核级的文件系统IO阻塞,不属于Python应用层的语法或逻辑错误,系统默认不会将IO等待状态向上抛给应用进程,因此脚本只会进入无响应的阻塞状态,不会输出错误信息也不会触发系统通知。
  • 仅桌面目录触发、管理员权限可规避的原因:Windows 10的桌面目录属于用户受保护的系统路径,会被资源管理器、桌面搜索索引服务、快速访问组件等多个系统进程持续持有共享句柄。普通权限的Python进程发起文件写入请求时,需要和这些系统进程的句柄抢占调度权限,连续发起的IO请求会进入排队队列。
  • 固定次数后冻结的原因:系统为普通用户进程分配的桌面目录IO排队槽位阈值就在10~20区间,槽位被占满后新的open()请求就会进入无限等待状态,因此现象和文件类型无关,仅和请求数量挂钩。

解决方案

执行chkdsk /f命令后重启系统即可解决该问题。

chkdsk /f会自动修复桌面所在分区的文件系统逻辑错误,清理异常残留的句柄缓存、损坏的目录索引项,重启后系统会重建桌面目录的权限配置和IO调度规则,即可恢复正常的文件写入能力。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:15:07