我的环境是Python 3.7.2,运行在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)。
x1c 0d1x的数据
有没有人知道问题可能是什么?特别是这是一个Python错误,或者我对TemporaryFile
的使用有什么问题?
如果有帮助,下面是Windows为每个文件夹显示的特定权限:
的
1条答案
按热度按时间sd2nnvve1#
比我最初做的更深入的研究,找到了答案。这确实是a Python bug,前一段时间报道过,但仍有待解决。
来自eryksun的评论描述了细节--这也是促使我更仔细地研究Python bug数据库的原因--所以最终这是应该归功于它的地方。我只是在这里填写它以得到问题的答案并关闭。
该错误只影响Windows环境,但不幸的是,它导致
tempfile.TemporaryFile
在Windows上无法用于此常见用例。