我可以在PySerial上使用xmodem协议吗?

我通过PySerial与串行设备build立了连接,但是我也想通过xmodem协议传输文件作为我的程序的一部分。

这将是最平台的方式来做到这一点? 最糟糕的情况是,我可以在Python中close()我的serial.Serial对象,并使用subprocess serial.Serial来调用/usr/bin/sb ,但这看起来/usr/bin/sb优雅。

我目前在Ubuntu 9.10上,正在使用USB-TTY适配器。

有任何想法吗?

PyPi上有xmodem模块。 读取和写入数据的构造函数有两个函数,实现它们与您打开的串行端口一起工作。 以下是其用法的简单示例:

 import serial try: from cStringIO import StringIO except: from StringIO import StringIO from xmodem import XMODEM, CRC from time import sleep def readUntil(char = None): def serialPortReader(): while True: tmp = port.read(1) if not tmp or (char and char == tmp): break yield tmp return ''.join(serialPortReader()) def getc(size, timeout=1): return port.read(size) def putc(data, timeout=1): port.write(data) sleep(0.001) # give device time to send ACK port = serial.Serial(port='COM5',parity=serial.PARITY_NONE,bytesize=serial.EIGHTBITS,stopbits=serial.STOPBITS_ONE,timeout=0,xonxoff=0,rtscts=0,dsrdtr=0,baudrate=115200) port.write("command that loads data via xmodem\r\n") sleep(0.02) # give device time to handle command readUntil(CRC) buffer = StringIO('data to send') XMODEM(getc, putc).send(buffer, quiet = 1) buffer.close() readUntil() 

我并不熟悉xmodem协议的细节,但是回答xmodem-for-python问题的人似乎是,甚至提供了一个看起来像Python中粗糙的xmodem实现的东西。 也许你可以使用它,或从其他答案的想法。