Последовательные команды Python для отправки CTRL+ L

У меня есть дисплей клиента, который подключен к последовательному порту. Я использую Windows-машину для этого.

Образ

Я хочу отправить Ctrl + L, чтобы очистить экран дисплея клиента, но не могу найти решение, которое мне помогает. В принципе, я хочу отправить Ctrl + "любые команды" в будущем.

В командной строке я могу использовать " Ctrl + L ", чтобы очистить существующее отображение и отобразить текст. Ниже приведена команда, которая отображается в приглашении

echo ^LDisplay me > COMX // ^L is actually CTRL + L 

Выше будет выводить как,

  1. Очищает дисплей.

  2. Отображает "Покажите мне"

Теперь я пытаюсь добиться того же, используя последовательный разъем 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,

Другие вопросы по тегам