Chinaunix首页 | 论坛 | 博客
  • 博客访问: 204073
  • 博文数量: 4
  • 博客积分: 1402
  • 博客等级: 上尉
  • 技术积分: 302
  • 用 户 组: 普通用户
  • 注册时间: 2006-09-16 18:31
文章分类

全部博文(4)

文章存档

2008年(4)

我的朋友

分类: Python/Ruby

2008-04-11 16:39:46

    第一次给 Python 写模块,放在 上面,欢迎下载使用。

    附上中文说明:

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.

 tree.py 模拟 unix tree 命令, 不过列出的是 SAMBA/CIFS 服务器文件列表.

 mirror.py 在本地建立远程 SAMBA/CIFS 服务器的文件镜像, 当然使用这两个例子都应该按照你自己的网络情况修改地址等内容.

主要的未实现特性列表:

1,
枚举 SAMBA/CIFS 主机的共享资源时只支持以 ASCII 字符表示的资源, 并且该资源的长度应小于 14 字节.

2,
不支持消息认证码.

3,
不支持大小超过 4 Gbytes 的文件.

将来要做的:

按照 CIFS 的发布标准(SNIA 1.0 )实现协议是一个痛苦的过程, 很多关键的东西找不到任何描述, 比如上面的消息认证码/共享资源枚举等等.

希望以后能实现上面的未支持属性.

联系作者:

Author: Du XiaoGang
Email: dugang@188.com
Home:


阅读(6137) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~