如何在Fuse python中正确编写readdir?

2024-05-12 21:13:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我想学习如何在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

Tags: path代码inhttpsselfjsontagskeys
1条回答
网友
1楼 · 发布于 2024-05-12 21:13:40

你看起来走对了路。。。您需要返回一系列Direntry对象。在

如果我用简单的字符串数组替换API调用,如下所示:

tags = ["a", "b", "c"]  
ret = map(lambda k: fuse.Direntry(name = k, type = stat.S_IFDIR), tags)
return ret

那就好了。所以我的猜测是标签.keys(). 我先检查各个Direntry对象,看看它们是否正确。在

相关问题 更多 >