Получена ошибка 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 не вариант).

0 ответов

Другие вопросы по тегам