JDM*_*JDM 5 windows temporary-files python-3.x
我的环境是 Python 3.7.2,在 Windows 10 上运行。我正在研究目录选择小部件,我正在寻找最干净+最可靠的方法来测试所选目录路径是否允许写入权限。
以前我一直用通常的open()方法打开一个命名文件,向它写入几个字节,然后删除它——把整个东西放在一个try-except块中。这没关系,但它冒着留下不需要的文件的风险。最近我遇到了 的文档tempfile.TemporaryFile(),这似乎是获得相同结果的更简洁的方法,而且没有在系统上留下垃圾文件的风险。
问题是,tempfile.TemporaryFile()当它给出dir一个只读文件夹的参数时,它会挂在我的系统上。我在谷歌上搜索并发现了这个非常古老的错误,但它是针对 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)
Run Code Online (Sandbox Code Playgroud)
当我运行这个脚本时,它挂在最后一行并就在那里(任务管理器显示 Python 消耗了大约 10-15% 的 CPU)。
有谁知道问题可能是什么?特别是这是一个 Python 错误,还是我的TemporaryFile?
如果有帮助,以下是 Windows 为每个文件夹显示的特定权限:
比我最初做的更深入的研究找到了答案。这确实是一个 Python bug,前段时间报告过,但仍有待解决。
eryksun的评论描述了细节——这促使我仔细研究 Python 错误数据库——所以最终这就是值得赞扬的地方。我只是在这里填写它以获得问题的答案并结束。
tempfile.TemporaryFile该错误仅影响 Windows 环境,但不幸的是,对于这种常见用例,它会导致在 Windows 上无法使用。