Windows 10 Python 3.9修改Minecraft客户端文件触发io.UnsupportedOperation崩溃
崩溃根因说明
- 直接触发报错的原因:文件打开权限不足
代码中全局打开module_state文件时,使用的是Pythonopen()函数的默认只读模式,未开启任何写入权限。当执行到f.write(newdata)逻辑时,就会直接抛出io.UnsupportedOperation: not writable。该问题和文件后缀是.md还是.txt完全无关,替换后缀没有修改打开权限的逻辑,自然不会改变报错结果。 - 现有文件操作逻辑存在结构性缺陷
即使调整文件打开模式获得写入权限,当前实现也无法正常完成文件修改:- 读取完整个文件内容后,文件指针会自动停在文件末尾,直接调用write会把修改后的内容追加在旧文本之后,而非替换原有目标行
fim_client.py和fim_client_reader.pyw会同时持有同一个状态文件的打开句柄,在Windows环境下极易触发文件锁冲突、内容互相覆盖的问题
- 隐藏的功能失效bug
项目内module_state文件的所有状态值都是全小写的false,但fim_client_reader.pyw做模块状态判断时,匹配的是字符串'sprint = True'。大小写不匹配会导致即使文件修改成功,读取端也永远识别不到已开启的模块状态。
参考修复方向
- 不要长期全局持有状态文件的打开句柄,每次需要修改模块状态时按流程操作:
- 先以只读模式完整读取文件全部内容
- 在内存中完成目标文本的替换
- 再以覆盖写入模式打开同一个文件,将修改后的完整内容写入
- 操作完成后立刻关闭文件句柄,释放系统资源与文件锁
- 统一全项目的状态值格式,所有脚本的状态写入、状态判断逻辑保持大小写完全一致,避免字符串匹配失效
- 两个脚本都不要长期保持状态文件的打开状态,每次需要读写时临时打开、操作完成立刻关闭,降低Windows环境下的文件冲突概率
内容的提问来源于stack exchange,提问作者CALISVALIS1010
相关产品推荐
相关产品推荐

