2008年(4)
分类: Python/Ruby
2008-04-11 16:39:46
readsmb
readsmb 与 SAMBA/CIFS:
SAMBA/CIFS 是一种广泛使用的网络文件共享协议, 或者说网络文件系统, Microsoft Windows 的文件共享即使用该协议.
readsmb 是一个开源的 Python 扩展模块, 使用 C 语言编写, 遵照 GPLv2 发布, 通过 readsmb 你可以在 Python 中访问 SAMBA/CIFS 服务器上的内容.
readsmb 设计上支持任何符合 POSIX 标准的平台, 但目前仅在 Linux 2.6 平台测试过.
readsmb 的优势:
1, 轻量级, 无须第三方库支持.
2, 易于使用, 接口简单, 使用者无须了解 SAMBA/CIFS 协议.
readsmb 的劣势:
1, 功能简单, 只支持浏览/读操作.
2, 尚不支持部分 SAMBA/CIFS 的高级特性, 比如消息认证码.
如何使用:
编译/安装:
“make/make install”即可, 如果你的 Python 不在系统默认的可执行路径的话需要修改 Makefile 中的 PYTHON 变量.
在 Python 中使用 readsmb:
# 导入模块
>>> import readsmb
# 设置 locale, 一般使用 UTF-8 即可, 通常 SAMBA/CIFS 服务会采用 Unicode 支持非 ASCII 字符.
>>> readsmb.locale('en_US.UTF-8')
# 浏览主机或目录, list 函数的 6 个参数分别表示 SAMBA/CIFS 服务器 IP 地址/服务端口/所访问目录/域名/用户名/密码. list 函数返回一个文件信息的列表, 每个文件信息包含文件类型(文件或目录)/最后修改时间/文件长度/文件名等.
# 需要注意的是 SAMBA/CIFS 文件系统采用 '\\' 作为目录分隔符
>>> readsmb.list('172.16.121.128', 445, '\\', 'mshome', 'guest', '')
>>> readsmb.list('172.16.121.128', 445, '\\tmp\\', 'mshome', 'guest',
'')
# 读取文件内容, read 函数的前六个参数与 list 函数相同, 第七个参数表示读操作的起始位置, 该位置相对于文件开始部分, 第八个参数表示每次读取操作的最大返回字节数, 上限暂定为 1 M. read 返回 str 类型, 其长度为实际读取长度.
>>>readsmb.read('172.16.121.128', 445, '\\tmp\\LICENSE-Python.txt',
'mshome', 'guest', '', 0, 0x100000)
在源码的 ”examples” 目录下面有两个文件示例了如何使用 readsmb.
主要的未实现特性列表:
1, 枚举 SAMBA/CIFS 主机的共享资源时只支持以 ASCII 字符表示的资源, 并且该资源的长度应小于 14 字节.
2, 不支持消息认证码.
3, 不支持大小超过 4 Gbytes 的文件.
将来要做的:
按照 CIFS 的发布标准(SNIA 1.0 版)实现协议是一个痛苦的过程, 很多关键的东西找不到任何描述, 比如上面的消息认证码/共享资源枚举等等.
希望以后能实现上面的未支持属性.
联系作者:
Author: Du XiaoGang
Email: dugang@188.com
Home: