Я новичок в Python и в настоящее время должен написать сокет python для запуска в качестве сценария, который связывается с устройством по TCP / IP (метеостанция).
Устройство действует как сторона сервера (прослушивание через IP: PORT, принятие соединения, получение запроса, передача данных).
Мне нужно только отправить одно сообщение, получить ответ, а затем спокойно и красиво выключить и закрыть розетку.
try:
comSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
sys.stderr.write("[ERROR] %s\n" % msg[1])
sys.exit(1)
try:
comSocket.connect((''))
except socket.error, msg:
sys.stderr.write("[ERROR] %s\n" % msg[1])
sys.exit(2)
comSocket.send('\r')
comSocket.recv(128)
comSocket.send('\r')
comSocket.recv(128)
comSocket.send('\r\r')
comSocket.recv(128)
comSocket.send('1I\r\r3I\r\r4I\r\r13I\r\r5I\r\r8I\r\r7I\r\r9I\r\r')
rawData = comSocket.recv(512)
comSocket.shutdown(1)
comSocket.close()
У меня проблема:
Канал связи ненадежен, устройство работает медленно. Таким образом, иногда ответ устройства с сообщением длиной 0 (просто ACK), мой код будет зависать и ждать ответа навсегда.
Этот фрагмент кода содержит часть, включающую SOCKET, весь код будет выполняться под CRON, поэтому замораживание нежелательно.
Мой вопрос:
Как лучше всего было бы в Python справиться с таким поведением, чтобы код не зависал и не ждал вечно, а пытался перейти к следующей отправке (или такой).