Я думаю, что нашел одно решение, хотя я не уверен, обязательно ли оно идеально.
Мы можем отредактировать сценарий, чтобы установить мастера pty в неблокирующий -режим:
import fcntl
...
for app in all_apps:
app_master, app_slave = pty.openpty()
flags = fcntl.fcntl(app_master, fcntl.F_GETFL)
flags |= os.O_NONBLOCK
fnctl.fcntl(app_master, fcntl.F_SETFL, flags)
Затем, всякий раз, когда мы записываем в мастер, если запись обычно блокируется, мы можем поймать BlockingIOError
для продолжения:
# (try to) send the message to each application
try:
os.write(app_fd, data)
except BlockingIOError:
print("Caught BlockingIOError")
Это не решает фундаментальной проблемы, заключающейся в том, что приложения могут неправильно себя вести и не читать свои последовательные порты, но при таком решении сценарий, по крайней мере, продолжит выполнять свою работу. Цена заключается в том, что некоторые данные могут быть потеряны (, передаваемые приложениям, которые не используют свой порт ).
Похоже, каким-то образом был активирован фильтр «pEp -Расшифровать -при -Отправке».
Удалил и сообщения вроде исчезли. Все еще не уверен, как это было установлено. Есть некоторые предположения о странном поведении в Mozillazine для более ранних версий, хотя это давно должно было исчезнуть.