问题描述
我正在尝试从云中的文件挂载虚拟驱动器。为此,我在示例 pyfuse 之后使用 passthroughfs.py。
我采用的方法之一是def _getattr
:
def _getattr(self,name):
# Temporarily commented for testing
# for attr in ('st_ino','st_mode','st_nlink','st_uid','st_gid',# 'st_rdev','st_size','st_atime_ns','st_mtime_ns',# 'st_ctime_ns'):
for attr in ('st_ino','st_size'):
# Code adapted to obtain the attributes
if attr == 'st_ino':
attr_value = int(element['id']) # 10 digits
if attr == 'st_size':
attr_value = element['size']
elif attr == 'st_uid':
attr_value = os.getuid()
elif attr == 'st_gid':
attr_value = os.getgid()
elif attr == 'st_mode':
if element['isFolder']:
# attr_value = (stat.S_IFDIR | 0o644)
attr_value = 16893 # Hardcoded temporary
else:
attr_value = (stat.S_IFREG | 0o664)
setattr(entry,attr,attr_value)
entry.generation = 0
entry.entry_timeout = 0
entry.attr_timeout = 0
entry.st_blksize = 512
entry.st_blocks = ((entry.st_size+entry.st_blksize-1) // entry.st_blksize)
return entry
当我列出 ls -l
挂载目录时,会为每个文件调用 lookup
方法:
async def lookup(self,inode_p,name,ctx=None):
name = fsdecode(name)
log.debug('lookup for %s in %d',inode_p)
path = os.path.join(self._inode_to_path(inode_p),name)
attr = self._getattr(name)
if name != '.' and name != '..':
self._add_path(attr.st_ino,path)
return attr
和控制台显示:
ls: you can not access 'test/My movie 1.mkv': File or directory does not exist
ls: you can not access 'test/dirTemp': File or directory does not exist
total 0
d????????? ? ? ? ? ? dirTemp
-????????? ? ? ? ? ? 'My movie 1.mkv'
_getattr
中分配的属性似乎不起作用。有什么想法或建议吗?提前致谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)