无法删除Windows 7中的测试文件夹

时间:2012-06-02 10:01:31

标签: python windows-7

我有像这样的项目设置

project/src/test/python/main.py
project/test-output

我希望main-testscript删除然后重新创建测试输出文件夹。

所以我把这段代码放在那里。

if os.path.exists("test-output"):
    shutil.rmtree("test-output")
os.mkdir("test-output")

但是当我用

运行它时
d:\projects\thisproject>python src\test\python\main.py

我从Windows获得访问拒绝错误。 [错误5]

如何解决这个问题?

mkdir命令工作得很好。

4 个答案:

答案 0 :(得分:2)

我最近在Windows 7下看到了shutil.rmtree()的这种行为,也是在从单元测试中创建和销毁测试文件夹的时候。并且,不,没有任何活动引用目录或其中的任何内容,甚至没有资源管理器窗口。我的'解决方案'(如果你可以称之为)就是这样做:

shutil.rmtree("my/test/dir", ignore_errors=True)

不完全是美丽的东西,但它解决了我的问题。

顺便说一下,这是一台64位Windows 7机器,而且是SSD。删除另一台计算机上Windows共享上的目录时,同事报告了与shutil.rmtree()相同的问题。我觉得Windows正在缓存这里的内容,如果只是简单的话。

答案 1 :(得分:1)

Windows仅将文件/目录标记为'删除关闭'与Unix不同,其中unlink立即从视图中删除项目。请参阅MSDN中Remove Directory函数的文档。因此,如果任何进程(例如资源管理器窗口,全文索引器或病毒扫描程序)仍然具有该文件的打开句柄,则会失败。

因此,即使您忽略删除错误,您也会在os.mkdir步骤中失败。一个简单的解决方法是不重新创建目录,而只是删除其所有内容。另一种是等待并在几秒钟后重试操作。

围绕该限制的最佳方法是为每次运行使用不同的输出文件夹(通过tempfile.makedtemp())。当你的最后一个引用消失时,你的删除就会被踢掉,但你的重新创建永远不会失败。

答案 2 :(得分:0)

最有可能的是使用该文件夹 - 通过打开位于该文件夹内的文件,或者将文件夹或其子文件夹作为其当前工作目录。

答案 3 :(得分:0)

试试这个:

def renewDir(name):
    while 1:
        try:
            if os.path.exists(name):
                shutil.rmtree(name)
            os.makedirs(name)   
            break
        except:
            pass