Python tempfile.TemporaryFile 在没有写权限时挂在 Windows

Python tempfile.TemporaryFile hangs on Windows when no write privilege

我的环境是 Python 3.7.2,运行ning Windows 10。我正在开发一个目录选择小部件,我正在寻找最干净的+测试所选目录路径是否允许写入权限的最可靠方法。

以前我一直用通常的 open() 方法打开一个命名文件,向它写入几个字节,然后删除它——将整个文件放在一个 try-except 块中。这没问题,但是 运行 有留下不需要的文件的风险。最近我看到了 tempfile.TemporaryFile() 的文档,这似乎是获得相同结果的更简洁的方法,而且没有在系统上留下垃圾文件的风险。

问题是,当 tempfile.TemporaryFile() 被赋予一个只读文件夹的 dir 参数时,它在我的系统上挂起。我用谷歌搜索并找到 this very old bug,但它是针对 Python 2.4 编写的,很久以前就已修复。

这是我整理的用于说明问题的测试脚本。 (请注意,我省略了我的实际应用执行的文件删除,因为它与插图无关。)

import os, tempfile

def normOpen(checkPath):
    try:
        with open(os.path.join(checkPath,'x.txt'),'wb') as tf:
            tf.write(b'ABC')
    except Exception as e:
        print('Write disabled for '+checkPath)
        print(str(e))
    else:
        print('Write enabled  for '+checkPath)

def tfOpen(checkPath):
    try:
        with tempfile.TemporaryFile(dir=checkPath) as tf:
            tf.write(b'ABC')
    except Exception as e:
        print('Write disabled for '+checkPath)
        print(str(e))
    else:
        print('Write enabled  for '+checkPath)

tryPath1 = 'C:\JDM\Dev_Python\TMPV\canwrite'  #Full control path
tryPath2 = 'C:\JDM\Dev_Python\TMPV\nowrite'   #Read-only path

print('First method - normal file-open')
normOpen(tryPath1)
normOpen(tryPath2)

print('Second method - TemporaryFile')
tfOpen(tryPath1)
tfOpen(tryPath2)

当我 运行 这个脚本时,它挂在最后一行并停在那里(任务管理器显示 Python 消耗了大约 10-15% CPU)。

有人知道问题出在哪里吗?特别是这是一个 Python 错误,还是我对 TemporaryFile 的使用有问题?

如果有帮助,下面是 Windows 为每个文件夹显示的特定权限:

比我最初所做的更深入的研究,找到了答案。这确实是 a Python bug,前段时间报告过,但仍有待解决。

来自 eryksun 的评论描述了细节——这促使我仔细研究了 Python 错误数据库——所以最终这就是功劳所在到期。我只是在这里填写它来回答问题并关闭它。

该错误仅影响 Windows 环境,但不幸的是,对于此常见用例,它的结果是 tempfile.TemporaryFile 在 Windows 上无法使用。