底层fs相关调用的包装器,支持高级fs堆栈

fslib的Python项目详细描述


fslib是python的os.*低级函数的包装器,目的是:

  • 为低级原语提供更多pythonic api
  • 将各种物理位置合并到应用程序的一个简单的伪文件系统中
  • 处理类似unionfs的功能,包括只读路径顶部的透明写覆盖

fslib支持python 2.7和3.3+;它只需要标准的python库。

下载

PYPI:https://pypi.python.org/pypi/fslib/

$ pip install fslib

来源:https://github.com/rbarrois/fslib/

$ git clone git://github.com/rbarrois/fslib/
$ python setup.py install

用法

替换import os

>>> importfslib>>>
>>> fs=fslib.FileSystem(fslib.OSFS('/'))>>> fs.dir_exists('/etc/')True
>>> fs.listdir('/')['/etc', '/dev', '/proc']

强制只读

为了确保用户代码不会更改任何物理文件, fslib提供了一个防止写入文件系统的简单包装器。

>>> importfslib>>> importfslib.stacking>>>
>>> fs=fslib.FileSystem(fslib.stacking.ReadOnlyFS(fslib.OSFS('/')))>>> fs.read_one_line('/etc/hostname')"ithor"
>>> fs.open('/tmp/x','w')OSError: [Errno 30] Read-only file system: '/tmp/x'

联合式安装

fslib以fslib.stacking.UnionFS的形式提供了一个类似unionfs的包装器。 此后端将提供多个分支的合并视图, 将所有写入重定向到声明为writable=True的分支。

>>> importfslib,fslib.builders,fslib.stacking>>>
>>> mem_fs=fslib.builders.make_memory_fake()>>> union_fs=fslib.stacking.UnionFS()>>> union_fs.add_branch(mem_fs,ref='memory',rank=0,writable=True)>>> union_fs.add_branch(fslib.stacking.ReadOnlyFS(fslib.OSFS('/')),ref='os',rank=1)>>>
>>> fs=fslib.FileSystem(backend=union_fs)>>> fs.writelines('/tmp/x',['aa','bb'])>>>
>>> open('/tmp/x','r')IOError: [Errno 2] No such file or directory: '/tmp/x'
>>> fs.file_exists('/tmp/x')True
>>> fs.readlines('/tmp/x')['aa', 'bb']
>>> fs.access('/tmp/x',os.F_OK)True

类unix文件系统树

可以“覆盖”物理或虚拟文件系统 一个简单的,统一的程序结构。

>>> importfslib,fslib.stacking>>> mnt=fslib.MountFS()>>> mnt.mount_fs('/',fslib.stacking.ReadOnlyFS(fslib.OSFS('/')))>>> mnt.mount_fs('/home/xelnor/.myapp',fslib.stacking.MemoryFS())>>> mnt.mount_fs('/home/xelnor/.myapp/cache',fslib.OSFS('/tmp/myapp/shared_cache'))

使用此设置:

  • /home/xelnor/.myapp/cache的所有读/写操作实际上都将在/tmp/myapp/shared_cache
  • /home/xelnor/.myapp(除了/cache)内的所有读/写操作都将发生在内存中
  • 其他地方不允许写。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在一个问题被连续正确回答三次/并添加差异后,我如何将程序循环回开始   Java中未实例化的匿名类   java如何在Android中录制视频,只允许横向模式和最长时间录制时间   java从另一个活动发送实时消息   多线程java线程和互斥   java禁用Spring安全日志   JAVA伊奥。StreamCorruptedException:在与子级和父级ProcessBuilder通信时写入子级中的标准输出时,流头无效   使用Java(HttpURLConnection)对Restheart进行身份验证(对于Mongodb)   java如何解决Jenkins中的SAXParseException?   java为什么我需要mockito来测试Spring应用程序?   计算sin-cos和tan时缺乏精度(java)   java Hibernate。不同项目中相同一对一映射的不同行为   java图像滑块:如何使用JavaFX将图像放在另一个图像上   java Mockito在使用when时抛出NotAMockException   http Java servlet发送回响应