在python中读取Fuse的实现没有按预期返回,cat: :糟糕的地址

问题描述 投票:0回答:1

我试图从某个存储库中获取数据,并尝试显示任何文件的文件内容,例如在存储库目录中使用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)

fusepys阅读功能link

python git filesystems fuse
1个回答
1
投票

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

修复可以从返回file_content[offset:(offset+size)]等微不足道的东西开始。当我说“开始”时,你必须记住,如果offsetsize(对于给定的offset)传递到你的read函数超出范围,你也必须提出正确的错误。

© www.soinside.com 2019 - 2024. All rights reserved.