我想学习如何在Fuse中编写文件系统。我的想法是编写一个与钉板.in(书签服务)。我对readdir有问题。据我所知,readdir是一个函数,它返回文件系统中的文件和文件夹。在
我有以下代码:
def readdir ( self, path, flags ):
print '*** readdir', path, flags
if path == '/':
# Path is root meaning we need to list tags and untagged bookmarks
tags_json=urllib2.urlopen('https://api.pinboard.in/v1/tags/get?format=json&auth_token='+self.apitoken).read()
tags = json.loads(tags_json)
ret = map(lambda k: fuse.Direntry(name=k, type=stat.S_IFDIR), tags.keys())
print ret
return ret
else:
pass
当在带有调试标志的Fuse中运行这个时,我得到的结果是
^{pr2}$但是文件系统是空的。我尝试了所有的方法,但我认为我不了解文件系统的流程。我真正的问题是,我应该返回什么来让ls显示文件/目录?我应该在哪里读到这个?在
如果你需要更多的代码,你可以去我的比特桶里读所有的东西:https://bitbucket.org/aquaplanet/pinboard.in-fuse/commits/38212eb035d3aba163bab9ed5a6b9284ce1dc93c
非常感谢您花时间阅读我的问题,我期待着任何答案!在
感谢@aleatha告诉我我写的是正确的,但是在标签.keys(),我很快就发现了标签.keys()是unicode。尽管有sv_东南大学-8在LANG和LC_CTYPE中(使用树莓pi),它需要8位字符串。这样做效果更好:
def readdir ( self, path, flags ):
print '*** readdir', path, flags
if path == '/':
# Path is root meaning we need to list tags and untagged bookmarks
tags_json=urllib2.urlopen('https://api.pinboard.in/v1/tags/get?format=json&auth_token='+self.apitoken).read()
tags = json.loads(tags_json)
ret = map(lambda k: fuse.Direntry(name=k.encode('iso-8859-1','replace'), type=stat.S_IFDIR), tags.keys())
return ret
else:
pass
你看起来走对了路。。。您需要返回一系列Direntry对象。在
如果我用简单的字符串数组替换API调用,如下所示:
那就好了。所以我的猜测是标签.keys(). 我先检查各个Direntry对象,看看它们是否正确。在
相关问题 更多 >
编程相关推荐