读取python中的Fuse实现未按预期返回,cat:<mountpoint>:bad address

时间:2017-12-02 13:15:19

标签: python git filesystems fuse

我正在尝试从某个存储库中获取数据,并尝试在存储库目录中显示任何文件的文件内容,例如cat <filename>

def read(self, path, size, offset, fh=None):
    file_content = ''
    path_ele = path.split('/')
    print('***[read]')
    print(path)
    if path.endswith('/') or path[1] == '.':
        print('ok')
        return file_content
    else:
        path = path.split('/')
        repo_name = path[-2]
        file_name = path[-1]
        print(repo_name, file_name)
        for item in self.user.get_user().get_repos():
            if item.name == repo_name:
                files = item.get_dir_contents('/')
                for file_ in files:
                    if file_name == file_.name:
                        file_content = item.get_file_contents(file_name).decoded_content
                        print(len(file_content.decode('utf-8')))
                        print(type(file_content.decode('utf-8')))
                        return file_content

当我对存储库目录中的文件执行cat时,它会给出由以下行引起的错误

assert retsize <= size, 'actual amount read %d greater than expected %d' % (retsize, size)

fusepy的阅读函数link中。

1 个答案:

答案 0 :(得分:1)

您不尊重read的所有参数,即sizeoffset。某些程序或命令一次只读取文件块。这意味着他们希望能够从位置y字节(size)开始读取x个字节(offset)。因此,您的代码中的主要错误是您只需为每次读取操作返回整个文件。

修复可以从返回file_content[offset:(offset+size)]等微不足道的事情开始。当我说“开始”时,您必须记住,如果offsetsize(针对给定的offset)传入您的{{1},您还必须提出正确的错误函数超出范围。