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

如何等待os.rmdir完成删除后再执行后续操作?

问题:删除空文件夹时的文件系统同步问题

我写了一个函数,会持续删除空文件夹,直到遇到有内容的文件夹或者根目录。但现在有个问题:删除子文件夹后循环执行太快,用listdir检查父文件夹是否为空时,已经删掉的子文件夹有时候还会被检测到。加sleep(0.1)能临时解决,但这不是合理方案,需要一种能确保文件夹完全删除后再继续执行的方法。

简化后的原函数

def delete_empty_folders(top_folder: str, root_folder: str) -> None:
    """Keep deleting empty folders until we reach a folder with content
    or the root folder"""

    while True:
        if not exists(top_folder):
            top_folder = dirname(top_folder)
            continue

        if samefile(top_folder, root_folder):
            break
        
        if listdir(top_folder):
            break

        rmdir(top_folder)
        top_folder = dirname(top_folder)

    return

解决方案:等待文件夹删除确认

问题根源是文件系统的缓存机制,删除操作返回后,文件系统可能还没完成元数据同步。可以通过循环检查已删除的文件夹是否存在,直到确认它确实被移除,再继续处理父文件夹。

修改后的函数如下:

import os
from os.path import exists, dirname, samefile

def delete_empty_folders(top_folder: str, root_folder: str) -> None:
    """持续删除空文件夹,直到遇到有内容的文件夹或根目录"""
    while True:
        if not exists(top_folder):
            top_folder = dirname(top_folder)
            continue

        if samefile(top_folder, root_folder):
            break
        
        # 检查当前文件夹是否为空
        if os.listdir(top_folder):
            break

        # 删除文件夹后,确认它已被彻底删除
        deleted_folder = top_folder
        os.rmdir(deleted_folder)
        top_folder = dirname(top_folder)
        
        # 循环等待,直到文件系统同步完成
        while exists(deleted_folder):
            pass  # 空循环等待,直到文件夹不存在

    return

补充优化

如果担心空循环占用过多CPU资源,可以在等待循环中加入极短的休眠,平衡性能和等待效率:

import time

# ... 其他代码不变 ...

while exists(deleted_folder):
    time.sleep(0.01)  # 每次等待10毫秒

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:22:19