Я пишу файловую систему предохранителя, используя python, которая должна взаимодействовать с amazon S3 (в основном рассматривать корзины S3 как файловые системы) и сталкиваюсь с некоторыми проблемами с моей реализацией readdir.
Прежде всего, я хотел бы упомянуть, что я относительно новичок в python и предохранителе (больше java-парня, использующего python здесь из-за простоты привязки предохранителя..), так что все это может быть просто глупой ошибкой новичка ..
Вот что у меня есть на данный момент:
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»):
root@michael-dev:/tmp/fusetest# ls -l
ls: reading directory .: Input/output error
total 0
root@michael-dev:/tmp/fusetest#
... и вот консольный вывод файловой системы: (найденные записи - это несколько "каталогов", то есть ключи 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-структуру... Я нашел этот вопрос, который также касается проблем с readdir, там используется класс "fuse.Direntry". Однако в моем fuse.py (версия fusepy = 2.0.2) я не могу найти подобный класс, самым близким по имени, которое я нашел, было «fuse_file_info», которое на самом деле не выглядит полезным для стоящей задачи.
Так что же должен вернуть readdir и откуда берется ошибка ввода-вывода?