Получена ошибка gdbm: (13, "Отказано в доступе") - Несмотря на то, что разрешения posix выглядят нормально
Я работаю с полкой в Python 2.7.6 для кэширования вычислений, и я столкнулся с проблемой, описанной ЗДЕСЬ для созданных мной полочных файлов, и реализовал предлагаемое решение в функции, которая объединяет файл other
в файл target
:
... # target and other are strings
# Loads the gdbm module, as suggested
mod = __import__("gdbm")
# Open target for modifications
tar = shelve.Shelf(mod.open(target, 'c', 0666)) # THROWS EXCEPTION
# Open other for reading
oth = shelve.Shelf(mod.open(other, 'r'))
...
Эти два файла принадлежат мне, записаны в локальной файловой системе и имеют права доступа posix, установленные на 0666
или, что эквивалентно, -rw-rw-rw-
в моем окне Linux Mint, чтобы были выполнены очевидные проверки:
$ ls -l
-rw-rw-rw- 1 myusr mygrp 11694080 Sep 17 21:24 cache
-rw-rw-rw- 1 myusr mygrp 12189696 Sep 17 21:23 cache.0
Вот, cache
это target
, а также cache.0
это other
файл. Текущий рабочий каталог принадлежит мне и имеет разрешения 0775
и я могу создавать файлы с touch
, cp
и т. д. по желанию без проблем, и я даже поставил свой umask
в 0000
поэтому новые файлы создаются с 0666
или, что эквивалентно, -rw-rw-rw-
разрешения.
Я даже сопоставил фактические права доступа к файлу с разрешениями в вызове gdbm.open(), согласно его документации; впрочем, безрезультатно.
Обновление: запустив код Python с sudo
то есть с привилегиями суперпользователя ошибка возникает в той же строке; однако с другим сообщением: gdbm error: Bad magic number
! Это очень странно, поскольку сама суть использования (казалось бы) модуля более низкого уровня (gdbm
в отличие от shelve
) точно обходил обнаружение типа базы данных.
Обновление № 2: Бег python whichdb.py
на файлы возвращается dbhash
; однако, изменяя модуль на dbhash
при загрузке кода все равно выдает следующие ошибки:
bsddb.db.DBAccessError: (13, 'Permission denied')
когда работает как пользователь, но
bsddb.db.DBInvalidArgError: (22, 'Invalid argument -- BDB0210 ././merge-cache.py: metadata page checksum error')
при беге с sudo; merge-cache.py
это имя моего кода.
Эта новая ошибка обсуждается здесь, в связи с версией python, но (i) моя версия python отличается от той, что в этом посте, и (ii) файлы создаются и позже читаются с той же версией python.
Этот ответ указывает shelve
"теряется" с большими наборами, но проблема, о которой я сообщаю, возникает и с небольшими базами данных.
Вопрос: Как я могу открыть эти полки с помощью python-2.7.6? (обновление Python не вариант).