我正在关注与FUSE相关的本教程。
https://www.stavros.io/posts/python-fuse-filesystem/
在上面提到的教程中,它只是将指定目录中的所有内容复制到挂载点。我试着稍微调整一下。我将针对leveldb中的每个键创建文件,而不是从一个目录复制到moint点。这些文件的内容将是相应密钥的值。到目前为止,我只尝试更改readdir()的主体。
def readdir(self, path, fh):
print "inside readdir"
self.db = plyvel.DB('/tmp/testdb/', create_if_missing=True)
return self.db.iterator(start=b'0'); #Statement which causes error
以下是追溯:
inside readdir
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/fuse.py", line 495, in _wrapper
return func(*args, **kwargs) or 0
File "/usr/local/lib/python2.7/dist-packages/fuse.py", line 698, in readdir
name, attrs, offset = item
ValueError: need more than 2 values to unpack
我不确定我做错了什么。如果我使用print语句在原始代码中打印r,我只需逐个获取所有文件名。以下是原始代码:
def readdir(self, path, fh):
full_path = self._full_path(path)
dirents = ['.', '..']
if os.path.isdir(full_path):
dirents.extend(os.listdir(full_path))
for r in dirents:
print r
yield r
我相信我要返回的迭代器中缺少偏移部分。如果是这样,那么我该如何将它附加到迭代器? 我正在使用fusepy和plyvel 怎么运行: 你应该安装plyvel。在tmp文件夹中创建一个虚拟数据库。添加范围从0到100的键和相应的虚拟值。复制粘贴原始代码并将readdir()的主体更改为我提到的那个。