我实现了5秒后每次读取的超时重试,但是没有达到我的期望。我只是在串行和线路读取操作中超时并一直等待读取。实际上,我想完全退出并再次写入并等待读取。
有人可以告诉我如何重试三次读写并退出操作吗?
timeout = x:将超时设置为x秒(允许浮动)返回 当请求的字节数可用时,立即 否则,请等待直到超时到期并返回所有 到那时为止。
我的重试逻辑不正确。
我的输出是:我想重试写入和读取3次并退出操作,但它只是在读取操作而不是在写入操作时重试。
python3 test.py
rc:0
Writing b'Z\xa5\x01 =\xff\x01\x00\xa1\xfe'
b''
b''
b''
b''
这是我的实现。
#!/usr/bin/env python3
import os
import sys
import glob
import serial
import time
import binascii
uart1 = '/dev/cu.usbserial-AK067XIB'
TEST_END=b'test_done\n'
def serial_ops():
retry_counter = 0
try:
device = serial.Serial(uart1, baudrate=115200, bytesize=8, parity='N', stopbits=1,
timeout=5, xonxoff=False, rtscts=False, dsrdtr=False)
#retry logic, exit after three attempts
retry_counter += 1
print('rc:%s' % retry_counter)
if retry_counter == 3:
print("I am exciting after three attempts no answer!")
device.flsuh()
device.close()
sys.exit(1)
except serial.SerialException as e:
print("Not able to open port")
except TypeError as e:
device.flush()
device.close()
return None
device.reset_output_buffer()
packet = bytearray()
packet = b'\x5A\xA5\x01\x20\x3D\xFF\x01\x00\xA1\xFE'
device.write(packet)
print("Writing %s" % packet)
time.sleep(0.5)
device.reset_input_buffer()
run = True
while run:
data=device.readline()
print(data)
if (data == TEST_END):
print("TEST DONE *****")
run = False
device.flush()
device.close()
serial_ops()