Windows PermissionError 和临时文件模块

我们在测试期间使用 tempfile 模块生成临时文件和目录。我们最近也开始在 Windows 上进行测试,但遇到了一堆 Windows PermissionErrors。


我最初认为这可能是因为 Windows 不像 Unix 不允许同时访问一个文件。当我查看代码时,即使没有同时访问文件,也会发生这种情况。


一个常见的线程似乎是当我们在上下文中使用 tempfile 模块的结构(with 语句)时发生的错误。当我们使用手动 try-except-finally 时,错误就会消失。


我正在研究解决这个问题的方法,前面提到的 try-except-finally 也在讨论中。


有没有其他人遇到过这个或有任何见解?


这是我们的测试功能(nosetests 但我不认为这是问题所在)


from nibabel.tmpdirs import InTemporaryDirectory

def test_high_level_glm_with_data():

    with InTemporaryDirectory():

        shapes, rk = ((7, 8, 7, 15), (7, 8, 7, 16)), 3

        mask, fmri_data, design_matrices = write_fake_fmri_data(shapes, rk)

        multi_session_model = FirstLevelModel(mask=mask).fit(

            fmri_data, design_matrices=design_matrices)

        z_image = multi_session_model.compute_contrast(

            np.eye(rk)[:2], output_type='z_score')

        variance_image = multi_session_model.compute_contrast(

            np.eye(rk)[:2], output_type='effect_variance')


        assert_array_equal(z_image.get_data() == 0., load(mask).get_data() == 0.)  # no error

        assert_true(

            (variance_image.get_data()[load(mask).get_data() > 0] > .001).all())  # error


如果我不使用with InTemporaryDir():测试工作。


万千封印
浏览 154回答 1
1回答

ITMISS

替换nibabel.tmpdirs.InTemporaryDirectory为 Pythontempfile.TemporaryDirectory解决了这个问题。也许 Nibabel 的版本在清理之前没有关闭文件?不知道这里发生了什么,这解决了我的问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python