Добрый день! Отправляю через последовательный порт команды(отправляют СМС).
В какой том момент происходит отправка смс (читаю ответы readline())
После возможно два варианта(продолжаю слушать readline()):
1 Приходит ответная СМС программка понимает что OK и завершает работу.
2 На модем не приходит ответная СМС, readline (висит) программа зависает.
Пробовал общение со скриптом выделить в отдельный файл и запускать через subprocess:
Запускаем процесс ждем команды отправки смс и дальше ждем ответного смс или по таймауту убиваем процесс.
Соответсвенно проблема c stdout.readline() также..
Подскажите как решается данная задача ?
Бесконечный цикл можно использовать если прийдет ответ от модема. А если я отправил смс и ответная не прийдет то цикл зависнет на read().
Я справился с задачей через поток и через флаг в потоке:
for recipient in recipients:
st = {recipient:0} #cавим флаг в 0
p1 = threading.Thread(target=send_reqest, name="t1", args=[recipient, ip, port])
p1.start() # запускаем поток, общаемся модемом
while st[recipient] < 1: # ждем пока в потоке поменяется флаг на 1 и выходим из цикла
print st
time.sleep(4)
time.sleep(30) # тут пока ждем 30 секунд и завершаем поток.