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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在python中读取Fuse的实现没有按预期返回,cat: :糟糕的地址相关的知识,希望对你有一定的参考价值。

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

答案

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

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

以上是关于在python中读取Fuse的实现没有按预期返回,cat: :糟糕的地址的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中读取文件:for 和 while 嵌套循环没有按预期工作:串行?

Python迭代器没有按预期工作

做了一个练习游戏,但它没有按预期读取“While”功能[重复]

Python 中 Perl 的 (<>) 等价物是啥?文件输入没有按预期工作

我的 Bootstrap TableTools 没有按预期工作

receive和process的过程