Последовательные команды Python для отправки CTRL+ L
У меня есть дисплей клиента, который подключен к последовательному порту. Я использую Windows-машину для этого.
Я хочу отправить Ctrl + L, чтобы очистить экран дисплея клиента, но не могу найти решение, которое мне помогает. В принципе, я хочу отправить Ctrl + "любые команды" в будущем.
В командной строке я могу использовать " Ctrl + L ", чтобы очистить существующее отображение и отобразить текст. Ниже приведена команда, которая отображается в приглашении
echo ^LDisplay me > COMX // ^L is actually CTRL + L
Выше будет выводить как,
Очищает дисплей.
Отображает "Покажите мне"
Теперь я пытаюсь добиться того же, используя последовательный разъем Python.
import serial
ser = Serial ('COM5',timeout=2)
ser.write("\x0C") # equivalent to ctrl+L
Это не работает вообще. Я получаю ошибку как `
Исключение в последовательном соединении: строки Unicode не поддерживаются, пожалуйста, закодируйте в байтах:'\x03'
Однако, если я попробую следующее для нормальных текстов, это прекрасно работает,
ser.write("Display me".encode()
Это отображает "Показать меня" на дисплее клиента.
Я пытался использовать ser.write("\x0C".encode())
но я не получаю вывод.
Я получаю ошибку как
Исключение в последовательном соединении: строки Unicode не поддерживаются, пожалуйста, закодируйте в байтах:'\x1fc\x00'
Буду признателен за любые предложения, улучшения и помочь решить эту проблему. Благодарю.
1 ответ
Чтобы кодировать Ctrl+L как байты в Python3, вы должны использовать:
b'\x0c'
Зачем?
Управляющие символы Ascii кодируются как их позиции в алфавите, поэтому Ctrl+C, поскольку это третья буква алфавита, закодированная в виде шестнадцатеричной строки, будет \x03
, Точно так же Ctrl+L будет \x0c
(шестнадцатеричный C десятичный 12).
В Python 3, чтобы получить байты, вы можете предварительно ожидать строку с b
,