Каков был бы лучший способ в Python, чтобы определить, writeable ли каталог для пользователя, выполняющего сценарий? Так как это, вероятно, включит использование модуля OS, я должен упомянуть, что работаю, это под *отклоняет среду.
Хотя то, что предлагается Christope, предложил более пифитон, модуль ОС имеет функцию OS.Access для проверки доступа:
os.access ('/ путь / к / папку', OS .W_ok)
# W_OK для записи, R_OK для чтения и т. Д.
может показаться странным, чтобы предложить это, но общий Python IDIOM -
, легче попросить прощения Чем для разрешения
Следуя по этому идиому, можно сказать:
попробуйте написать в вопрос каталога, и поймать ошибку, если у вас нет разрешения на это.
Установите флажок BITS:
def isWritable(name):
uid = os.geteuid()
gid = os.getegid()
s = os.stat(dirname)
mode = s[stat.ST_MODE]
return (
((s[stat.ST_UID] == uid) and (mode & stat.S_IWUSR)) or
((s[stat.ST_GID] == gid) and (mode & stat.S_IWGRP)) or
(mode & stat.S_IWOTH)
)
Если вы заботитесь только о файле перми, OS.Access (путь, OS.W_OK)
должны делать то, что вы просите. Если вы вместо этого хотите знать, могут ли вы . Написать в каталог, Открыть ()
Тестовый файл для записи (он не должен существовать заранее), уловить и изучить любой IoError
и потом очистите тестовый файл.
В целом, чтобы избежать Actou атаки (только проблема, если ваш сценарий работает с повышенными привилегиями - SUID или CGI или около того), вы не должны доверять этим опереженным временным тестам, Но падение приема, сделайте открытую ()
и ожидать IoError
.