2017-12-02 15 views
0

リポジトリからデータを取得しようとしていて、例えばcat <filename>というファイルのファイル内容をリポジトリディレクトリ内に表示しようとしています。私は、リポジトリディレクトリ内のファイルにcatを行うとPythonでPythonの実装が期待通りに返されないのを読むcat:<mountpoint>:悪いアドレス

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 

は、それは私にfusepy sが機能linkを読んで

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

次の行に起因する誤差を与えます。

答えて

1

readのすべてのパラメータ、つまりsizeoffsetを尊重するわけではありません。特定のプログラムまたはコマンドは、一度に複数のファイルのみを読み取ります。これは、位置yバイト(offset)で始まるxバイト(size)を読み取ることができることを期待していることを意味します。だからあなたの主な間違いは、読み込み操作ごとにファイル全体を返すということです。

修正は、file_content[offset:(offset+size)]のように簡単なものから始めることができます。私が "start"と言うとき、offsetまたはsize(与えられたoffsetの)がread関数に渡された場合、適切なエラーを出さなければならないことに注意する必要があります。

関連する問題