XMODEM、YMODEM和ZMODEM的调制解调器实现
项目描述
此包将XMODEM、YMODEM和ZMODEM协议移植到Python。我们尽量以尽可能简洁的方式实现这些协议,同时不破坏协议规范。
大多数调制解调器类的接口相当相似。但请注意,XMODEM协议一次只能发送一个文件(流),而YMODEM和ZMODEM协议可以发送多个。
所有调制解调器实现都必须提供一个getc回调来从远程端检索字符数据,以及一个putc回调来发送字符数据。
示例
一个使用STDIN/STDOUT的示例可能如下所示
>>> import select >>> import sys >>> def getc(size, timeout=5): ... r, w, e = select.select([sys.stdin.fileno()], [], [], timeout) ... if r: return sys.stdin.read(size) ... >>> def putc(data, timeout): ... r, w, e = select.select([], [sys.stdout.fileno()], [], timeout) ... if w: return sys.stdout.write(data)
现在我们可以使用XMODEM发送流
>>> from modem import XMODEM >>> xmodem = XMODEM(getc, putc) >>> stream = file(__file__) >>> xmodem.send(stream) ...
或者使用YMODEM或ZMODEM发送一个或多个文件
>>> from modem import ZMODEM >>> zmodem = ZMODEM(getc, putc) >>> zmodem.send([__file__])
致谢
关于协议
- XMODEM:
© 1977 Ward Christensen
- YMODEM:
© 1985 Chunk Forsberg, Omen Technology Inc.
- ZMODEM:
© 1986 Chunk Forsberg, Omen Technology Inc.
感谢
Paolo Perfetti,编写了大部分YMODEM实现