PySerial: В чем разница между read() и readinto()?Python

Программы на Python
Ответить
Anonymous
 PySerial: В чем разница между read() и readinto()?

Сообщение Anonymous »

Я использовал pySerial 3.4 в своем коде для извлечения данных из последовательного порта (точнее, устройства чтения/записи RFID-чипов). Мне нужно отправить команду читателю, а затем прочитать результаты с помощью считывателя.



По сути, я пишу 12-байтовую команду, а затем пытаюсь получить 24-байтовый вывод.
Мой вопрос: почему port.read(24) не может работать, но res = bytearray(24); port.readinto(res);сработало успешно?
Полный код прилагается:

import serial

ser = serial.Serial('COM5',9600,timeout=5,rtscts=True,inter_byte_timeout=5)

def compose_find(port):
port.write(bytes.fromhex('555500000003020405'))
port.flush()
return port.read(12)[6] == 0

def compose_read(port,sec_loc=0,block_loc=0,key='F'*12):
assert sec_loc in range(0,16),'sector location is from 0~15'
assert block_loc in range(0,4),'block location is from 0~3'
assert compose_find(port),'cannot read card!'

sec_loc = '0'+str(hex(sec_loc))[2:]
block_loc = '0'+str(hex(block_loc))[2:]
command = '55 55 00 00 00 0E 03 07 00 00 {} {} 60
{}'.format(sec_loc,block_loc,key).replace(' ','')
parity = str(hex(reduce(lambda x,y:x^y,bytes.fromhex(command))))[2:]
if len(parity) == 1: parity = '0'+parity
command += parity
print(command)
port.write(bytes.fromhex(command))
port.flush()
res = bytearray(24)
port.readinto(res)
return res

compose_read(port=ser,sec_loc=8,block_loc=2)


Подробнее здесь: https://stackoverflow.com/questions/511 ... d-readinto
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»