Моя среда - Python 3.7.2, работающая на Windows 10. Я работаю над виджетом выбора каталога и ищу самый чистый и надежный способ проверить, позволяет ли выбранный путь к каталогу разрешать запись. 1001 *
Ранее я открывал именованный файл обычным методом 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)
Когда я запускаю этот скрипт, он висит на последней строке и просто сидит там (диспетчер задач показывает, что Python потребляет около 10-15% ЦП).
![Windows CMD](https://i.stack.imgur.com/wzkmV.jpg)
Кто-нибудь знает, в чем может быть проблема? В частности, это ошибка Python или что-то не так с моим использованием TemporaryFile
?
В случае, если это поможет, ниже приведены конкретные привилегии, которые Windows показывает для каждой из этих папок:
![Permissions](https://i.stack.imgur.com/7lhwR.jpg)