fuse python:readdir函数所需的返回类型?

2024-05-16 08:00:38 发布

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

我正在使用python编写一个fuse文件系统,它应该与amazons3交互(基本上将s3bucket视为文件系统),并且在readdir实现中遇到了一些问题。在

首先,我想说的是,我对python和fuse比较陌生(更多的是java人,这里使用python是因为fuse绑定的简单性…),所以这可能只是一个愚蠢的初学者的错误。。在

以下是我目前的情况:

    def readdir(self, path, fh):
    s3Path = S3fsUtils.toS3Path(path) # removes prefixed slash - boto3 can't handle that in key names
    print("Reading dir: " + str(path))
    retVal = [".", ".."]
    for s3Obj in self.bucket.objects.all(): # for now list all objects in bucket
        tmp = str(s3Obj.key)
        if tmp.startswith(s3Path): # only return things below current path
            print("READDIR: appending to output: " + tmp)
            retVal.append(tmp)
    return retVal # return directory contents as a list of strings

下面是运行“ls-l”(文件系统装入“/tmp/fusetest”)时发生的情况:

^{2}$

。。。下面是文件系统的控制台输出: (找到的条目是一些“目录”,即S3键,后面没有数据)

Reading dir: /
READDIR: appending to output: blabla/
READDIR: appending to output: blablubb/
READDIR: appending to output: haha/
READDIR: appending to output: hahaha/
READDIR: appending to output: huhu/
READDIR: appending to output: new_folder/
Releasing dir: /

我猜问题是我返回了一个字符串列表,而不是一些更像C结构的东西。。。 我找到了this question which is also about problems with readdir,那里有一个类“导火索“被使用。然而,在我的保险丝.py(fusepy version=2.0.2),我找不到任何这样的类,我找到的最接近的名称是“fuse_file_info”,它看起来对手头的任务不太有用。在

那么readdir应该返回什么呢?i/o错误是从哪里来的呢?在


Tags: topathinselfoutputreturn错误dir
1条回答
网友
1楼 · 发布于 2024-05-16 08:00:38

好吧,这正是我所期望的-一个愚蠢的错误。。。在

由于amazons3将文件夹表示为名称以斜杠结尾的空文件,所以我的文件列表中包含了很多末尾带有斜杠的条目。 事实证明,fuse无法处理这一点,导致readdir操作失败。在

从文件名中删除斜杠就可以做到这一点。在

相关问题 更多 >