Определение, Является ли Каталогом Writeable

Каков был бы лучший способ в Python, чтобы определить, writeable ли каталог для пользователя, выполняющего сценарий? Так как это, вероятно, включит использование модуля OS, я должен упомянуть, что работаю, это под *отклоняет среду.

93
задан illuminatedtiger 21 January 2010 в 22:24
поделиться

4 ответа

Хотя то, что предлагается Christope, предложил более пифитон, модуль ОС имеет функцию OS.Access для проверки доступа:

os.access ('/ путь / к / папку', OS .W_ok) # W_OK для записи, R_OK для чтения и т. Д.

162
ответ дан 24 November 2019 в 06:12
поделиться

может показаться странным, чтобы предложить это, но общий Python IDIOM -

, легче попросить прощения Чем для разрешения

Следуя по этому идиому, можно сказать:

попробуйте написать в вопрос каталога, и поймать ошибку, если у вас нет разрешения на это.

67
ответ дан 24 November 2019 в 06:12
поделиться

Установите флажок 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)
     )
7
ответ дан 24 November 2019 в 06:12
поделиться

Если вы заботитесь только о файле перми, OS.Access (путь, OS.W_OK) должны делать то, что вы просите. Если вы вместо этого хотите знать, могут ли вы . Написать в каталог, Открыть () Тестовый файл для записи (он не должен существовать заранее), уловить и изучить любой IoError и потом очистите тестовый файл.

В целом, чтобы избежать Actou атаки (только проблема, если ваш сценарий работает с повышенными привилегиями - SUID или CGI или около того), вы не должны доверять этим опереженным временным тестам, Но падение приема, сделайте открытую () и ожидать IoError .

9
ответ дан 24 November 2019 в 06:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: