我与货架工作在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版本,但(我)连接我的Python版本比一个在该职位的不同,以及(ii)创建文件和后来与相同版本的Python读取。
这样的回答表明shelve
被“浪费”大集,但我报告的问题与一些较小的数据库时也是如此。
问:我怎样才能打开使用python-2.7.6这些货架文件? (升级蟒蛇不是一个选项)。