gpt4 book ai didi

python-3.x - 当没有写入权限时,Python tempfile.TemporaryFile 在 Windows 上挂起

转载 作者:行者123 更新时间:2023-12-03 00:33:36 28 4
gpt4 key购买 nike

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

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

问题是,当给我的系统提供一个只读文件夹的 dir 参数时,tempfile.TemporaryFile() 会卡在我的系统上。我用谷歌搜索发现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)。

Windows CMD

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

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

Permissions

最佳答案

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

来自eryksun的评论描述了细节——这促使我仔细研究Python错误数据库——所以最终这就是值得赞扬的地方。我只是在这里填写它以获得问题的答案并结束。

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

关于python-3.x - 当没有写入权限时,Python tempfile.TemporaryFile 在 Windows 上挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55109076/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com