Я пишу программу, которая требует использования XMODEM для передачи данных с сенсорного устройства. Я бы не хотел писать свой собственный код XMODEM, поэтому мне было интересно, знает ли кто-нибудь, есть ли где-нибудь доступный модуль Python XMODEM?
XMODEM для питона
Ответы (5)
На PyPi есть модуль XMODEM. Он обрабатывает как отправку, так и получение данных с помощью XModem. Ниже приведен пример его использования:
import serial
try:
from cStringIO import StringIO
except:
from StringIO import StringIO
from xmodem import XMODEM, NAK
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 prepare new buffer and start sending it
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 initiates xmodem send from device\r\n")
sleep(0.02) # give device time to handle command and start sending response
readUntil(NAK)
buffer = StringIO()
XMODEM(getc, putc).recv(buffer, crc_mode = 0, quiet = 1)
contents = buffer.getvalue()
buffer.close()
readUntil()
Я думаю, вы застряли в своем собственном.
Вы можете использовать sz, который реализует X/Y/ZMODEM. Вы можете обратиться к двоичному файлу или перенести необходимый код на Python.
Вы можете попробовать использовать SWIG для создания привязок Python для библиотек C, указанных выше (или любых других библиотек C/C++). вы найдете в Интернете). Это позволит вам использовать тот же C API непосредственно из Python.
Фактическая реализация, конечно же, все еще будет на C/C++, поскольку SWIG просто создает привязки к интересующим функциям.
Существует модуль Python, который вы можете использовать -> https://pypi.python.org/pypi/xmodem< /а>
Вы можете увидеть протокол передачи в http://pythonhosted.org//xmodem/xmodem.html